【发布时间】:2021-02-02 09:08:43
【问题描述】:
如何在borderlayout的'North'中显示两个JPanel?
以下是输出 GUI 的示例代码,该 GUI 具有三个不同的行,Top、Middle、Bottom。第一行有一个按钮,第二行有 3 个按钮,最后一行有一个。
package borderLayoutDemo;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
public class BorderLayoutDemo {
public static void main(String[] args) {
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame fj = new JFrame("Demonstration of Border Layout");
fj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JButton jbtn1 = new JButton("UP");
JButton jbtn2 = new JButton("DOWN");
JButton jbtn3 = new JButton("LEFT");
JButton jbtn4 = new JButton("RIGHT");
JButton jbtn5 = new JButton("MIDDLE");
JPanel pnl = new JPanel();
pnl.setLayout(new BorderLayout());
pnl.add(jbtn1, BorderLayout.NORTH);
pnl.add(jbtn2, BorderLayout.SOUTH);
pnl.add(jbtn3, BorderLayout.WEST);
pnl.add(jbtn4, BorderLayout.EAST);
pnl.add(jbtn5, BorderLayout.CENTER);
fj.add(pnl);
fj.pack();
fj.setVisible(true);
}
}
上述代码的输出: output of above code
但是,我希望在北区有两个 jpanel,这样它就会像这样形成 4 个“行”:
|---------------button--------------| //north
|---------------button2-------------| //north
----------------center--------------- //center
|---------------button3-------------| //south
我试过简单地添加如下:
pnl.add(jbtn1, BorderLayout.NORTH);
pnl.add(jbtn2, BorderLayout.NORTH);
但是这里发生的是第二个按钮只是替换了第一个按钮:
|---------------button2-------------| //north
----------------center--------------- //center
|---------------button3-------------| //south
如何在北部布局区域获得两行?
【问题讨论】:
-
北段只能添加一个组件。因此,使该组件成为 JPanel 并将其他组件添加到面板中。您可能希望对该面板使用不同的布局。在具有不同布局的其他面板中使用多个面板是一种常见的 GUI 技术。
-
您可以将 2 个 JPanel 放在第三个 JPanel 上并添加第三个 JPanel
-
@BUG 谢谢,所以我尝试这样做,但我会为第三个 jpanel 组合使用什么布局?我会使用网格布局吗?我尝试为两个面板做一个边框布局,但它似乎不起作用。然后我将该组合面板添加到另一个面板
-
但是不鼓励使用
setSize()和setBounds(),如here 所述 -
不要使用 setSize() 或 setBounds()!!! Swing 被设计为与布局管理器一起使用。阅读 Layout Managers 上的 Swing 教程,然后确定哪种布局管理器组合适合您。
标签: java swing jpanel layout-manager border-layout