(Java)BorderLayout中的JPanel是';我不能填上我想要的尺码
我想用三个JPanel做一个程序。其中两个应该占据一半的高度,并在同一点结束,因此第三个可以占据整个屏幕高度,并填充其余的开放空间。 下面是我希望它看起来的样子,大约没有黑色边框: 然而,当我试图编写代码时,面板要么占用了太多的宽度,要么填充的高度不够。当我将边界布局限制添加到内容面板时,我使用了各种边界布局限制的组合,但没有任何效果。在某些组合中,蓝色和红色是正确的高度,但占据了整个宽度,而绿色根本不存在。其他时候,比如我将在下面提供的代码中,蓝色看起来应该是这样的,但红色占据了整个宽度,使绿色成为应该的一半高度(Java)BorderLayout中的JPanel是';我不能填上我想要的尺码,java,swing,layout,jpanel,Java,Swing,Layout,Jpanel,我想用三个JPanel做一个程序。其中两个应该占据一半的高度,并在同一点结束,因此第三个可以占据整个屏幕高度,并填充其余的开放空间。 下面是我希望它看起来的样子,大约没有黑色边框: 然而,当我试图编写代码时,面板要么占用了太多的宽度,要么填充的高度不够。当我将边界布局限制添加到内容面板时,我使用了各种边界布局限制的组合,但没有任何效果。在某些组合中,蓝色和红色是正确的高度,但占据了整个宽度,而绿色根本不存在。其他时候,比如我将在下面提供的代码中,蓝色看起来应该是这样的,但红色占据了整个宽度,使
JPanel contentPanel = new JPanel(new BorderLayout());
JPanel redPanel = new JPanel();
JPanel greenPanel = new JPanel();
JPanel bluePanel = new JPanel();
//left out background setting lines
//Dimension screenSize defined above, this is a fullscreen program
redPanel.setPreferredSize(new Dimension(screenSize.width-300,screenSize.height/2));
bluePanel.setPreferredSize(new Dimension(screenSize.width - 300,screenSize.height/2));
greenPanel.setPreferredSize(new Dimension(300, screenSize.height));
contentPanel.add(greenPanel, BorderLayout.EAST);
contentPanel.add(bluePanel, BorderLayout.WEST);
contentPanel.add(redPanel, BorderLayout.SOUTH);
下面是代码的外观:
我试着把蓝色的加在北面,绿色的加在南面,然后重新排列顺序,但没有效果。出什么事了,我该怎么解决它?您可能需要一个复合布局 首先创建一个布局为
GridLayout
的容器,将要拆分的两个组件添加到其中,然后使用BorderLayout
您可能需要一个复合布局 首先创建一个布局为
GridLayout
的容器,将要拆分的两个组件添加到其中,然后使用BorderLayout
中心容器应使用
网格布局设置
中心容器应使用网格布局设置
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
public class Test {
public static void main(String[] args) {
new Test();
}
public Test() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
ex.printStackTrace();
}
JPanel center = new JPanel(new GridLayout(2, 1));
center.add(makePanel(Color.BLUE));
center.add(makePanel(Color.RED));
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(center);
frame.add(makePanel(Color.GREEN), BorderLayout.EAST);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
protected JPanel makePanel(Color background) {
TestPane panel = new TestPane();
panel.setBackground(background);
return panel;
}
public class TestPane extends JPanel {
public TestPane() {
}
@Override
public Dimension getPreferredSize() {
return new Dimension(200, 100);
}
}
}