gpt4 book ai didi

java - (Java) BorderLayout 中的 JPanel 未填充我想要的尺寸

转载 作者:行者123 更新时间:2023-12-01 19:59:17 24 4
gpt4 key购买 nike

我正在尝试使用三个 JPanel 制作一个程序。其中两个应各占据一半高度并在同一点结束,因此第三个可以占据整个屏幕高度并填充其余的开放空间。我希望它看起来像这样,没有黑色边框: Here's what I want it to look like, approximately, withou

但是,当我尝试对其进行编码时,面板要么占用了过多的宽度,要么没有填充足够的高度。将 BorderLayout 限制添加到内容面板时,我尝试了各种组合,但没有任何效果。对于某些组合,蓝色和红色是正确的高度,但占据了整个宽度,而绿色根本不存在。其他时候,例如我将在下面提供的代码,蓝色看起来应该如此,但红色占据了整个宽度,使绿色占据了应有高度的一半。

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);

下面是这段代码的样子:

enter image description here

我尝试将蓝色添加为北,将绿色添加为南,并重新排列顺序,但没有任何效果。出了什么问题以及如何修复它?

最佳答案

您可能需要复合布局。

首先创建一个布局为 GridLayout 的容器,将要拆分的两个组件添加到其中,然后使用 BorderLayout 将其添加到容器的中心

enter image description here

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);
}

}

}

关于java - (Java) BorderLayout 中的 JPanel 未填充我想要的尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48532918/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com