【发布时间】:2017-01-07 12:41:21
【问题描述】:
我已经尝试了几个小时在 Java 中获取 JPanel 以在此配置中包含这 4 个其他面板(见图)
- 蓝色框不应改变大小。
- 白盒子永远不应该改变高度,但可以变宽。
- 深灰色框不应该改变宽度,但可以变得更高。
- 浅灰色框可以变高或变宽。
对我来说似乎很简单,前几天我在 C# 中完成了它,并且轻而易举。设置位置,宽度,高度,以及是否锚定某侧,繁荣完成,我开始喜欢java而不是C,直到我遇到这个。
我尝试了无数 GridBagLayout 的组合,多个嵌套的 BoxLayout 实例。它们似乎都在做一些很奇怪的事情,比如让每个面板变成一个 4 x 4 的小正方形,或者它们周围有疯狂的填充物,或者需要根据窗口重新调整大小的东西,不要这样做。
有没有某种神奇的组合可以做到这一点? null 布局是否做锚定或百分比尺寸。
我得到的最接近的是带有GridBagLayout 的底部图像,它在加载时看起来不错,但是当你重新调整窗口大小时会这样。
这是获取上述图片的代码
class MainPanel extends JPanel {
public MainPanel(){
this.setBackground(new Color(216,216,216));
this.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
JPanel topTitle = new JPanel();
topTitle.setPreferredSize(new Dimension(140, 40));
topTitle.setMinimumSize(new Dimension(140, 40));
topTitle.setBackground(new Color(174, 216, 249));
c.weightx = 0.5;
c.gridx = 0;
c.gridy = 0;
this.add(topTitle,c);
JPanel mainHeader = new JPanel();
mainHeader.setPreferredSize(new Dimension(1060, 40));
mainHeader.setMinimumSize(new Dimension(1060, 40));
mainHeader.setBackground(Color.WHITE);
c.gridx = 1;
c.gridy = 0;
this.add(mainHeader,c);
JPanel sideNav = new JPanel();
sideNav.setPreferredSize(new Dimension(140, 760));
sideNav.setMinimumSize(new Dimension(140, 760));
sideNav.setBackground(new Color(110,110,110));
c.gridx = 0;
c.gridy = 1;
this.add(sideNav,c);
JPanel dataPanel = new JPanel();
dataPanel.setPreferredSize(new Dimension(1060, 760));
dataPanel.setMinimumSize(new Dimension(1060, 760));
dataPanel.setBackground(new Color(216,216,216));
c.gridx = 1;
c.gridy = 1;
this.add(dataPanel,c);
}
}
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖minimal reproducible example 或Short, Self Contained, Correct Example。
-
并且不要考虑使用空布局...如果这样做你会后悔的。同样正如@AndrewThompson 在您尝试解决它时至少发布您的一个代码所提到的那样,这样我们就可以更容易地说出您的代码有什么问题
-
“不要考虑使用空布局...” 在编辑帖子之前,我没有注意到提到
null布局。不能再同意了。 -
谢谢,已添加代码
-
代码上有两点:1) 那是不是 MCVE / SSCCE。它们必须包含导入和
main(String[])方法来启动它并显示示例!我在回答中包含了一个 MCVE。 2) 请参阅Detection/fix for the hanging close bracket of a code block 了解我无法再费心解决的问题。
标签: java swing layout-manager gridbaglayout