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 以获取工作示例。有区域部分:
- 如何使用边框
- 布局管理器可视化指南
今天的问候语,我有一个 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 以获取工作示例。有区域部分:
- 如何使用边框
- 布局管理器可视化指南