空布局不显示在Java中的边框布局上

问题描述

今天,我有一个JFrame和一个名为panelMain的Jpanel。我对框架和面板的所有设置都是完美的。我已经将panelMain的Layout设置为BorderLayout。现在,我创建了另一个名为panel1的面板。 panel1具有空布局。我向panel1添加了一些按钮(布局为null)。然后我将panel1添加到panelMain的WEST中。当我运行程序时,panelMain出现了,但是panel1没有出现。然后我将panel1的布局从null更改为FlowLayout,然后它出现在panelMain的WEST侧。我不知道放入BorderLayout时空布局面临什么问题,有人可以帮帮我吗。

JPanel panelMain = new JPanel();
JPanel panelWEST = new JPanel();
JButton button = new JButton();
JButton button2 = new JButton();
Constructor(){
    setContentPane(panelMain);
    setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
    setExtendedState(Frame.MAXIMIZED_BOTH);

    panelMain.setLayout(new BorderLayout());
    panelMain.setBackground(Color.CYAN);

    panelWEST.setLayout(null);
   

    button.setBounds(50,50,200,200);
    button.setText("West Button1");
    button2.setBounds(50,300,200);
    button2.setText("West Button2");
    panelWEST.setBackground(Color.PINK);
    panelWEST.add(button);
    panelWEST.add(button2);

    panelMain.add(panelWEST,BorderLayout.WEST);
    

解决方法

不要使用空布局!!! Swing旨在与布局管理器一起使用。

使用随机数绝不是一个好主意,这正是您尝试猜测组件大小时正在做的事情。

每个Swing组件都有责任确定自己的首选大小。然后,布局管理器使用此信息来设置添加到面板的组件的大小/位置。使用空布局时,您将失去此功能。

作为解决方案,您可以执行以下操作:

JPanel buttonPanel = new JPanel( new GridLyaout( 0,1) );
buttonPanel.add(button1);
buttonPanel.add(button2);

JPanel west = new JPanel( new BorderLayout() );
west.add(buttonPanel,BorderLayout.PAGE_START);

panelMain.add(west,BorderLayout.LINE_START);

如果您想在buttonPanel的左侧留出空间,则可以使用EmptyBorder。阅读Swing Tutorial中的示例。有关以下内容的区域:

  1. 如何使用边框
  2. 布局管理器视觉指南