无法在 GridBagLayout 中调整 JTextField 和 JScrollPane 的大小

Cannot resize JTextField and JScrollPane in GridBagLayout

我想减少 GridBagLayout 中 JTextField 和 JScrollPane 的宽度和高度,但似乎宽度只能通过设置文本字段列减少到 JList 中最长内容的长度。我不确定是否需要调整两个组件的尺寸或仅调整其中一个组件的尺寸以匹配宽度。

我试过 setPreferredSize()、setSize() 和设置文本字段的列长度,但它们似乎没有任何作用。

    GridBagConstraints c = new GridBagConstraints();
    c.fill = GridBagConstraints.HORIZONTAL;
    c.gridx = 0;
    c.gridy = 0;
    fontDialog.add(fontLabel, c);
    c.gridx = 1;
    fontDialog.add(styleLabel,c);
    c.gridx = 2;
    fontDialog.add(sizeLabel, c);
    c.gridx = 0;
    c.gridy = 1;
    fontDialog.add(fontTextField, c);
    c.gridx = 1;
    fontDialog.add(styleTextField, c);
    c.gridx = 2;
    fontDialog.add(sizeTextField, c);
    c.gridx = 0;
    c.gridy = 2;
    fontDialog.add(new JScrollPane(fontList), c);
    c.gridx = 1;
    fontDialog.add(new JScrollPane(styleList), c);
    c.gridx = 2;
    fontDialog.add(new JScrollPane(sizeList), c);
    fontDialog.pack();

您必须设置列的最小大小和首选大小才能控制大小。将它们覆盖为您想要的。

添加到 GridBagLayout 中的单元格时,组件以其首选大小显示。

c.fill = GridBagConstraints.HORIZONTAL;

您正在使用水平填充,它告诉布局将所有组件的宽度填充到列中的最大宽度,因此覆盖首选尺寸。

如果您不想增加文本字段的宽度,请取消该限制。

然后在创建文本字段时使用:

JTextField textField = new JTextField(10);

该数字将允许文本字段确定其自己的首选大小以容纳 10 "W" 个字符。