【发布时间】:2014-12-04 00:36:35
【问题描述】:
我在 Swing 中使用 GridBagLayout,我注意到左侧的锚点是正确的,但顶部的锚点是 -60 像素。我知道窗口的确切大小,960x640。我正在制作两列:一列左侧有两个面板(两者的网格高度均为 2),另一列右侧有三个面板(网格高度为 1、2 和 1)。这是代码:
gameFrame.setLayout(new GridBagLayout());
GridBagConstraints constraints = new GridBagConstraints();
constraints.anchor = GridBagConstraints.NORTHWEST;
InfoPanel infoPanel = new InfoPanel();
infoPanel.setPreferredSize(new Dimension(320, 320));
infoPanel.setMinimumSize(new Dimension(320, 320));
infoPanel.setMaximumSize(new Dimension(320, 320));
infoPanel.setBackground(Color.BLUE);
constraints.gridx = 0;
constraints.gridy = 0;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel, constraints);
InfoPanel infoPanel2 = new InfoPanel();
infoPanel2.setPreferredSize(new Dimension(320, 320));
infoPanel2.setMinimumSize(new Dimension(320, 320));
infoPanel2.setMaximumSize(new Dimension(320, 320));
infoPanel2.setBackground(Color.RED);
constraints.gridx = 0;
constraints.gridy = 2;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel2, constraints);
InfoPanel infoPanel3 = new InfoPanel();
infoPanel3.setPreferredSize(new Dimension(640, 200));
infoPanel3.setMinimumSize(new Dimension(640, 200));
infoPanel3.setMaximumSize(new Dimension(640, 200));
infoPanel3.setBackground(Color.GREEN);
constraints.gridx = 1;
constraints.gridy = 0;
//constraints.gridwidth = 1;
constraints.gridheight = 1;
gameFrame.add(infoPanel3, constraints);
InfoPanel infoPanel4 = new InfoPanel();
infoPanel4.setPreferredSize(new Dimension(640, 240));
infoPanel4.setMinimumSize(new Dimension(640, 240));
infoPanel4.setMaximumSize(new Dimension(640, 240));
infoPanel4.setBackground(Color.YELLOW);
constraints.gridx = 1;
constraints.gridy = 1;
//constraints.gridwidth = 1;
constraints.gridheight = 2;
gameFrame.add(infoPanel4, constraints);
InfoPanel infoPanel5 = new InfoPanel();
infoPanel5.setPreferredSize(new Dimension(640, 200));
infoPanel5.setMinimumSize(new Dimension(640, 200));
infoPanel5.setMaximumSize(new Dimension(640, 200));
infoPanel5.setBackground(Color.PINK);
constraints.gridx = 1;
constraints.gridy = 3;
//constraints.gridwidth = 1;
//constraints.gridheight = 1;
gameFrame.add(infoPanel5, constraints);
gameFrame.pack();
gameFrame.setLocationRelativeTo(null);
我很欣赏代码不干净,它不是它的样子,我只是想确保我可以先得到我需要的布局。
结果如下:
由于布局开始将对象放置在距顶部 -60 像素的位置,因此底部有 60 像素的间隙。
有没有人遇到过这样的事情?这让我很困惑。
【问题讨论】:
-
@MadProgrammer 感谢您提供的信息,我一直不知道为什么这样做会遭到反对,但我知道不建议这样做,现在我有了一个解释。但是,是的,我尝试所有这三个的原因是因为我的绝望:)
-
我可以让它工作,但我无法解释为什么你在框架末尾有额外的空间......
-
我认为这是那个布局经理高高举起双臂并说:“嗯,这是我能用你给我的东西做的最好的事情之一”。如果您将
constraints.gridheight = 2;更改为constraints.gridheight = 3;forinfoPanel2,它将起作用。 -
哇,非常感谢,你说的成功了。如果您选择发布它,我很乐意将此标记为已接受的答案。再次感谢!
标签: java swing layout-manager gridbaglayout