【问题标题】:GridBagLayout resizing componentsGridBagLayout 调整组件大小
【发布时间】:2012-04-26 08:02:54
【问题描述】:

这是我使用 GridBagLayout 布置的:

但是,当我选择一个文件时,应该填充几个标签。这是我使用那些小“...”按钮选择文件后的样子:

如您所见,整个布局变得一团糟。我在 actionlistener 中所做的就是:

            fileTxt = fileChooser.getSelectedFile();
            fileTxtField.setText(fileTxt.getAbsolutePath());
            labels = getLabels(); 
            lbl1.setText(labels[0].toUpperCase());
            Dimension size = lbl1.getPreferredSize();
            lbl1.setMinimumSize(size);
            lbl1.setPreferredSize(size);
            lbl2.setText(labels[1]);
            lbl2.setToolTipText(longLbl);
            size = lbl2.getPreferredSize();
            lbl2.setMinimumSize(size);
            lbl2.setPreferredSize(size);
            button1.setPreferredSize(new Dimension(20,25));
            button2.setPreferredSize(new Dimension(20,25));

因此,基本上,按钮将变为原始尺寸,而不是首选尺寸。这会弄乱整个布局。我该如何解决?所有组件都设置为不填充 gridBagConstraints.fill 的 gridbagconstraint 设置为 GridBagConstraints.NONE - 但是,布局仍然混乱:(

更新

根据您的建议,我删除了调用 setPreferredSize() 方法的代码,这就是我得到的:

显然,这是我想要避免的 - 一个大于其文本的按钮,这是在按钮上设置 setPreferredSize 的原因。现在我该怎么办?

【问题讨论】:

  • 为什么需要重新设置大小。您可以在创建布局时首先将其设置为不可见,并使其在动作侦听器中可见。此外,网格包似乎没有正确设置,因为标签以外的组件从正常网格中弹出。您应该为组件设置网格包常量。它提供了更对齐的布局(网格包布局的目的)
  • 1) 为了尽快获得更好的帮助,请发帖 SSCCE。 2) 最好在构造函数中建议文本字段的大小。 3)一定要在容器上调用pack()。 4) 布局有时会尊重组件的首选大小,有时则不会。 5) 这看起来很适合GroupLayout
  • @NitinChhajer 添加了更新

标签: java swing gridbaglayout


【解决方案1】:

不要打电话给setPreferredSize()。让LayoutManager 这样做。

在您的GridBagConstraints 中定义fillweightx 参数以定义应如何分配额外空间。

【讨论】:

  • 尽管这个答案帮助我摆脱了 setPrefferredSize 方法,但 Nitin 的答案正确地解决了我的 UI 问题。因此,我对此表示赞成,并授予 Nitin 的答案。
【解决方案2】:

有一个简单的解决方案。按钮的额外宽度是由于按钮文本左侧和右侧的默认margins。默认为 14

你可以设置btn.setMargin(new Insets(2, 0, 2, 0));,这个额外的差距就会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-21
    • 1970-01-01
    • 2014-02-20
    • 2014-07-08
    • 1970-01-01
    • 2014-10-01
    • 2017-03-22
    • 2012-03-26
    相关资源
    最近更新 更多