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

时间:2013-04-18 13:50:47

标签: java swing layout-manager boxlayout

我正在尝试在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);


    }

}

4 个答案:

答案 0 :(得分:3)

  

四个按钮应位于第一行,第五个按钮应位于第一行   第二行。

答案 1 :(得分:1)

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

关于大小,尝试使用panel.setMinimumSize(Dimension d)

答案 2 :(得分:1)

我所做的是使用null作为布局管理器并将组件放在我自己的位置。如果您希望在调整窗口大小时中继组件或者您不知道applet的最终大小等,那么管理器可以正常工作

但大部分时间都不是真的或过度杀人

而是仅使用像素将组件放在网格上     的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

<强>样品

答案 3 :(得分:0)

您还可以使用setBounds(arg1,arg2,arg3,arg4)方法。使用它可以获得更好的帮助。 Doing Without a Layout Manager (Absolute Positioning)