如何在borderlayout北区放置两个Jpanels/Jbuttons?
Posted
技术标签:
【中文标题】如何在borderlayout北区放置两个Jpanels/Jbuttons?【英文标题】:How do I put two Jpanels/Jbuttons in the borderlayout north section? 【发布时间】: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 教程,然后确定哪种布局管理器组合适合您。
【参考方案1】:
当您将 GUI 视为 JFrame
和定义 GUI 所需的 JPanels
时,创建更复杂的 GUI 很简单。
这是您要查找的 GUI。
我为JFrame
(北、中和南)的每个部分创建了一个JPanel
。 JPanels
中的每一个都使用了BorderLayout
,因此当您展开 GUI 时,NORTH 和 SOUTH 按钮的高度保持不变。
这是完整的可运行示例代码。
import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class BorderLayoutDemo implements Runnable
public static void main(String[] args)
SwingUtilities.invokeLater(new BorderLayoutDemo());
@Override
public void run()
JFrame fj = new JFrame("Demonstration of Border Layout");
fj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fj.add(createNorthPanel(), BorderLayout.NORTH);
fj.add(createCenterPanel(), BorderLayout.CENTER);
fj.add(createSouthPanel(), BorderLayout.SOUTH);
fj.pack();
fj.setLocationByPlatform(true);
fj.setVisible(true);
private JPanel createNorthPanel()
JPanel panel = new JPanel(new BorderLayout());
JButton button1 = new JButton("North Button");
panel.add(button1, BorderLayout.NORTH);
JButton button2 = new JButton("North Button 2");
panel.add(button2, BorderLayout.SOUTH);
return panel;
private JPanel createCenterPanel()
JPanel panel = new JPanel(new BorderLayout());
JButton button = new JButton("Center Button");
panel.add(button, BorderLayout.CENTER);
return panel;
private JPanel createSouthPanel()
JPanel panel = new JPanel(new BorderLayout());
JButton button = new JButton("South Button");
panel.add(button, BorderLayout.SOUTH);
return panel;
【讨论】:
以上是关于如何在borderlayout北区放置两个Jpanels/Jbuttons?的主要内容,如果未能解决你的问题,请参考以下文章
缺少 JTextField 并且布局错误地放置了 JButton
在使用add()方法添加组件到容器时,必须指定将其放置在哪个区域中