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

Null Layout not showing over Border Layout in Java

今天的问候语,我有一个 JFrame 和一个名为 panelMain 的 Jpanel。我对框架和面板的所有设置都很完美。我已将 panelMain 的布局设置为 BorderLayout。我现在创建了另一个名为 panel1 的面板。 panel1 的布局为空。我向 panel1(具有空布局)添加了一些按钮。然后我将 panel1 添加到 panelMain 的 WEST。当我 运行 程序时,panelMain 出现了,但 panel1 没有出现。然后我将 panel1 的 Layout 从 null 更改为 FlowLayout,然后它出现在 panelMain 的 WEST 侧。不知道null layout放在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,200);
    button2.setText("West Button2");
    panelWEST.setBackground(Color.PINK);
    panelWEST.add(button);
    panelWEST.add(button2);

    panelMain.add(panelWEST,BorderLayout.WEST);
    

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

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

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

作为解决方案,您可以这样做:

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

如果您想要 space 在 buttonPanel 的左侧,那么您可以使用 EmptyBorder。阅读 Swing Tutorial 以获取工作示例。有区域部分:

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