【问题标题】:Swing GridBagLayout anchor is outside of the windowSwing GridBagLayout 锚点在窗口之外
【发布时间】: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 像素的间隙。

有没有人遇到过这样的事情?这让我很困惑。

【问题讨论】:

  • 我希望它是用于测试目的,但以防万一,Should I avoid the use of set(Preferred|Maximum|Minimum)Size methods in Java Swing?
  • @MadProgrammer 感谢您提供的信息,我一直不知道为什么这样做会遭到反对,但我知道不建议这样做,现在我有了一个解释。但是,是的,我尝试所有这三个的原因是因为我的绝望:)
  • 我可以让它工作,但我无法解释为什么你在框架末尾有额外的空间......
  • 我认为这是那个布局经理高高举起双臂并说:“嗯,这是我能用你给我的东西做的最好的事情之一”。如果您将constraints.gridheight = 2; 更改为constraints.gridheight = 3; for infoPanel2,它将起作用。
  • 哇,非常感谢,你说的成功了。如果您选择发布它,我很乐意将此标记为已接受的答案。再次感谢!

标签: java swing layout-manager gridbaglayout


【解决方案1】:

我认为这是那个布局经理高高举起双臂并说,“嗯,这是我能用你给我的东西做的最好的事情之一” .

如果您将constraints.gridheight = 2; 更改为constraints.gridheight = 3;infoPanel2,它将起作用。

“认为” 与第一列相比,它与第二列的总高度有关(不考虑行跨度)。允许第二行扩展到两行之外似乎允许它折叠额外的空间。

为了它的价值。我可能会将这两列放入单独的面板中,然后布置这两个面板,但这只是我......

【讨论】:

    猜你喜欢
    • 2014-09-26
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多