JPanel布局问题



所以我有一个小问题添加两个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);
}

如果你想使用BorderLayout,然后使用BorderLayout。中心尽可能多地占用空间,其他方向只占用它们需要的空间。如果你添加额外的东西到jpanel,它们会变得更大,基于它们所包含的对象的需要。

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

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

创建一个2行1列的GridLayout

试试下面的代码。有一个问题,显然,如果你在面板上安装网格布局,你不添加组件,它不会占用空间。

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);
            }
        });
    }
}

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

相关内容

  • 没有找到相关文章

最新更新