1

这是我使用 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 的原因。现在我该怎么办?

4

2 回答 2

5

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

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

于 2012-04-26T08:15:59.157 回答
3

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

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

于 2012-04-26T19:37:16.343 回答