Java GridBagLayout调整组件大小

Java GridBagLayout调整组件大小,java,swing,gridbaglayout,Java,Swing,Gridbaglayout,这是我使用GridBagLayout进行的布局: 但是,当我选择一个文件时,应该填充几个标签。这是我使用这些小“…”按钮选择文件后的样子: 正如你所看到的,整个布局都搞砸了。我在actionlistener中所做的就是: fileTxt = fileChooser.getSelectedFile(); fileTxtField.setText(fileTxt.getAbsolutePath()); labels = ge

这是我使用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中的gridBagConstraints填充设置为gridBagConstraints.NONE-但是,布局仍然混乱:(

更新

根据您的建议,我删除了调用setPreferredSize()方法的代码,结果如下:


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

不要调用
setPreferredSize()
。让
LayoutManager
这样做吧


GridBagConstraints
中,定义
fill
weightx
参数,以定义额外空间的分配方式。

不要调用
setPreferredSize()
。让
LayoutManager
执行此操作


GridBagConstraints
中定义
fill
weightx
参数来定义额外空间的分配方式。

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


您可以设置
btn.setMargin(新的插入(2,0,2,0));
这样额外的间隙就会消失。

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


您可以设置
btn.setMargin(新插图(2,0,2,0))
而额外的间隙将消失。

为什么需要重置大小。您可以在创建布局时首先将其设置为不可见,并使其在动作侦听器中可见。此外,网格包似乎没有正确设置,因为标签之外的组件正在从正常网格中弹出。您应该将网格包设置为组件的状态。它提供了一个更加对齐的布局(网格袋布局的目的)1)为了更快地提供更好的帮助,发布一个。2) 最好建议构造函数中文本字段的大小。3) 确保在容器上调用
pack()
。4) 布局有时考虑组件的首选尺寸,有时则不考虑。5) 这看起来非常适合。@NitinChhajer添加了一个更新为什么需要重置大小。您可以在创建布局时首先将其设置为不可见,并使其在动作侦听器中可见。此外,网格袋似乎没有正确设置,因为标签以外的组件正在从正常网格中弹出。您应该为组件设置网格袋常数。它提供了一个更加一致的布局(网格袋布局的目的)1)为了更快地提供更好的帮助,发布一个。2) 最好建议构造函数中文本字段的大小。3) 确保在容器上调用
pack()
。4) 布局有时考虑组件的首选尺寸,有时则不考虑。5) 这看起来非常适合我。@Nitchhajer添加了一个更新即使这个答案帮助我摆脱了setPreferredSize方法,Nitin的答案正确地解决了我的UI问题。因此,我投票支持这一点,并奖励尼廷的答案。尽管这个答案帮助我摆脱了setPreferredSize方法,但尼廷的答案正确地解决了我的UI问题。因此,我投票支持尼廷的回答。