JPanel布局问题

时间:2011-05-02 20:27:21

标签: java swing user-interface

所以我在向主主面板添加两个JPanel时遇到了一些问题。我把它作为我想要做的一个简单的例子,因为你不想查看大量不必要的代码:)。我希望首先添加第一个面板(),然后添加第二个面板()。我尝试使用边框布局并在添加面板时将它们定位在 BorderLayout 上调用南北,但仍然没有运气。

提前致谢。

private JPanel one,two;

public Example(){
    one = new JPanel();
    one.setSize(new Dimension(400,400));
    two = new JPanel(new GridLayout(7,8));
    two.setSize(new Dimension(400,400));
    one.setBackground(Color.BLACK);
    two.setBackground(Color.BLUE);
    JPanel mainpanel = new JPanel();
    mainpanel.setBackground(Color.orange);
    mainpanel.add(one);
    mainpanel.add(two);
    add(mainpanel);
    setSize(500,500);
    setVisible(true);
}

3 个答案:

答案 0 :(得分:1)

如果你想使用BorderLayout,那么BorderLayout.CENTER会占用尽可能多的空间,其他方向只需要他们需要的东西。如果你向JPanels添加额外的东西,它们会根据它们所包含的对象的需要变大。

如果你想在主JPanel中均匀划分空间,试试这个:

JPanel mainpanel = new JPanel(new GridLayout(2, 1));

创建一个包含2行1列的GridLayout ......

答案 1 :(得分:1)

试试这段代码。显然,如果您在面板上安装网格布局而没有添加任何组件,则不会占用空间。

import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Example extends JFrame
{
    private JPanel one, two;

    public Example()
    {
        one = new JPanel();
        two = new JPanel();///new GridLayout(7, 8));
        one.setBackground(Color.BLACK);
        two.setBackground(Color.BLUE);
        JPanel mainpanel = new JPanel(new BorderLayout());
        mainpanel.setBackground(Color.orange);
        mainpanel.add(one, BorderLayout.NORTH);
        mainpanel.add(two, BorderLayout.SOUTH);
        setContentPane(mainpanel);
        setSize(500, 500);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            @Override
            public void run()
            {
                Example f = new Example();
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                f.setVisible(true);
            }
        });
    }
}

答案 2 :(得分:0)

GridLayout忽略包含组件的setSize方法中设置的值。如果要控制每个组件的大小,请考虑使用GridBagLayout