如何在JPanel上定位/布局组件



我试图在JFrame上定位5个按钮。四个按钮应该在第一行,第五个按钮应该在第二行。但是这里所有的按钮都出现在一行中,第五个按钮的一半在面板之外。顺便说一下,如果我使用frame。pack();我的身材比我想象的要小。我不想改变帧的大小。我想在第二行找到第五个。

import java.awt.GridBagLayout;
import java.awt.GridLayout;
import javax.swing.*;

public class test {
    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setBounds(100, 100, 529, 300);
        frame.getContentPane().setLayout(new GridLayout(1, 0, 0, 0));

        JPanel panel = new JPanel();
        frame.getContentPane().add(panel);
        panel.setLayout(new BoxLayout(panel, BoxLayout.X_AXIS));

        JButton btnNewButton_4 = new JButton("New button");
        panel.add(btnNewButton_4);
        JButton btnNewButton_3 = new JButton("New button");
        panel.add(btnNewButton_3);
        JButton btnNewButton = new JButton("New button");
        panel.add(btnNewButton);
        JButton btnNewButton_1 = new JButton("New button");
        panel.add(btnNewButton_1);
        JButton btnNewButton_2 = new JButton("New button");
        panel.add(btnNewButton_2);

        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    }
}

四个按钮应该在第一行,第五个按钮应该在第一行第二行

  • Oracle教程中关于如何使用布局管理器的标准和预订示例

  • 使用GridLayout(两行)为JPanel,但所有的jbutton将有相同的尺寸

  • 使用griddbaglayout,然后每个jbutton将有不同的大小或不太

  • 不可见的JComponents或空的JLabel可以帮助你在最复杂的变化

您使用的是BoxLayout,其中组件不会自动换行(请查看API文档:http://docs.oracle.com/javase/6/docs/api/javax/swing/BoxLayout.html)

关于大小,尝试使用panel。setMinimumSize(维d)

我所做的是使用null作为布局管理器,并放置组件我的自我。如果你想让你的组件在窗口调整大小时被转发,或者你不知道applet的最终大小等

但大多数情况下,这不是真的或超过kill

只是将组件按像素放置在网格上setBounds (x, y,宽度、高度);例子:

    JFrame frame = new JFrame();
    frame.setBounds(100, 100, 529, 300);
    frame.getContentPane().setLayout(null);//over ride default
    Container c = frame.getContentPane();

    JButton btnNewButton_4 = new JButton("New button");
    c.add(btnNewButton_4);
    c.seBounds(4,10,40,25);
    JButton btnNewButton_3 = new JButton("New button 3");
    c.add(btnNewButton_3);
    c.seBounds(40,10,40,25);//...etc

    http://sel2in.com/prjs/aplt/go/Ap1a.html
  • http://sel2in.com/prjs/aplt/go/

您也可以使用setBounds(arg1, arg2, arg3, arg4)方法。使用这个来获得更好的帮助。没有布局管理器(绝对定位)

相关内容

  • 没有找到相关文章

最新更新