问题描述
如何在borderlayout的“北部”中显示两个JPanel?
以下是示例代码,该代码输出具有三个不同行(顶部,中间,底部)的GUI。有一个按钮覆盖第一行,三个按钮覆盖第二行,一个覆盖底部行。
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);
}
}
但是,我希望北段有两个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
如何在北面布局区域获得两行?
很抱歉,如果这个问题很糟糕,我是新手。预先感谢。
解决方法
当您将一个GUI视为一个JFrame
且定义该GUI所需的JPanels
数量很大时,创建一个更复杂的GUI很简单。
这是您要查找的GUI。
我为JPanel
的每个部分(NORTH,CENTER和SOUTH)创建了一个JFrame
。每个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;
}
}