有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JPanel布局问题

因此,我对向主面板添加两个JPanel有一个小问题。我把它作为我想做的一个快速示例,因为您不想查看大量不必要的代码:)。我希望先添加第一个面板(北部),然后添加第二个面板(南部)。我尝试过使用BorderLayout,并在添加面板时将它们放置在BorderLayout上调用north和south,但仍然没有成功

提前谢谢

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) 个答案

  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. # 2 楼答案

    如果要使用BorderLayout,请选择BorderLayout。中心占据尽可能多的空间,其他方向只占他们需要的空间。如果您向JPanel添加额外的内容,它们将根据所包含对象的需要变得更大

    如果要在主JPanel中均匀地划分空间,请尝试以下操作:

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

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

  3. # 3 楼答案

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