Java更改GridLayout中的JTextField大小

Java更改GridLayout中的JTextField大小,java,swing,awt,layout-manager,grid-layout,Java,Swing,Awt,Layout Manager,Grid Layout,我有一个GridLayout(3,2),如下所示,有2个jLabel、2个JTextFields和一个JButton。我添加它们,如图片或代码所示。一切都很好,但是JTextField的大小太大了,我希望它如我画的红线所示。我试着说jtf3.setPreferredSize(新维度(x,y))但它根本没有改变维度。另一个解决方案是使GridLayout稍微GridLayout(3,2,1,50)例如(通过添加50),但这也会将JLabels移到顶部。。。我只想完全如图所示。。。有什么想法吗?非常

我有一个GridLayout(3,2),如下所示,有2个jLabel、2个JTextFields和一个JButton。我添加它们,如图片或代码所示。一切都很好,但是JTextField的大小太大了,我希望它如我画的红线所示。我试着说
jtf3.setPreferredSize(新维度(x,y))但它根本没有改变维度。另一个解决方案是使GridLayout稍微
GridLayout(3,2,1,50)
例如(通过添加50),但这也会将JLabels移到顶部。。。我只想完全如图所示。。。有什么想法吗?非常感谢

JPanel copying_panel = new JPanel();
copying_panel.setLayout(new GridLayout(3, 2));
copying_panel.setBackground(new Color(200, 221, 242));
JLabel jl4 = new JLabel("From:", SwingConstants.CENTER);
JTextField jtf3 = new JTextField();
JLabel jl5 = new JLabel("To:", SwingConstants.CENTER);
JTextField jtf4 = new JTextField();
JLabel jl6 = new JLabel();
JButton jb2 = new JButton("Go");

copying_panel.add(jl4);
copying_panel.add(jtf3);
copying_panel.add(jl5);
copying_panel.add(jtf4);
copying_panel.add(jl6);
copying_panel.add(jb2);


这就是
GridLayout
的工作原理,它为所有组件提供了相等的空间。取而代之的是,考虑使用<代码> GridBagLayout < /代码>。< /P> 有关更多详细信息,请参阅

JPanel copying_panel = new JPanel();
copying_panel.setLayout(new GridBagLayout());
copying_panel.setBackground(new Color(200, 221, 242));
JLabel jl4 = new JLabel("From:", SwingConstants.CENTER);
JTextField jtf3 = new JTextField(10);
JLabel jl5 = new JLabel("To:", SwingConstants.CENTER);
JTextField jtf4 = new JTextField(10);
JButton jb2 = new JButton("Go");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
copying_panel.add(jl4, gbc);

gbc.gridy++;
copying_panel.add(jl5, gbc);

gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
gbc.gridy = 0;
copying_panel.add(jtf3, gbc);

gbc.gridy++;
copying_panel.add(jtf4, gbc);

gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
gbc.gridy++;
copying_panel.add(jb2, gbc);

这就是
GridLayout
的工作原理,它为所有组件提供了相等的空间。取而代之的是,考虑使用<代码> GridBagLayout < /代码>。< /P> 有关更多详细信息,请参阅

JPanel copying_panel = new JPanel();
copying_panel.setLayout(new GridBagLayout());
copying_panel.setBackground(new Color(200, 221, 242));
JLabel jl4 = new JLabel("From:", SwingConstants.CENTER);
JTextField jtf3 = new JTextField(10);
JLabel jl5 = new JLabel("To:", SwingConstants.CENTER);
JTextField jtf4 = new JTextField(10);
JButton jb2 = new JButton("Go");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
copying_panel.add(jl4, gbc);

gbc.gridy++;
copying_panel.add(jl5, gbc);

gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
gbc.gridy = 0;
copying_panel.add(jtf3, gbc);

gbc.gridy++;
copying_panel.add(jtf4, gbc);

gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
gbc.gridy++;
copying_panel.add(jb2, gbc);

这就是
GridLayout
的工作原理,它为所有组件提供了相等的空间。取而代之的是,考虑使用<代码> GridBagLayout < /代码>。< /P> 有关更多详细信息,请参阅

JPanel copying_panel = new JPanel();
copying_panel.setLayout(new GridBagLayout());
copying_panel.setBackground(new Color(200, 221, 242));
JLabel jl4 = new JLabel("From:", SwingConstants.CENTER);
JTextField jtf3 = new JTextField(10);
JLabel jl5 = new JLabel("To:", SwingConstants.CENTER);
JTextField jtf4 = new JTextField(10);
JButton jb2 = new JButton("Go");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
copying_panel.add(jl4, gbc);

gbc.gridy++;
copying_panel.add(jl5, gbc);

gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
gbc.gridy = 0;
copying_panel.add(jtf3, gbc);

gbc.gridy++;
copying_panel.add(jtf4, gbc);

gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
gbc.gridy++;
copying_panel.add(jb2, gbc);

这就是
GridLayout
的工作原理,它为所有组件提供了相等的空间。取而代之的是,考虑使用<代码> GridBagLayout < /代码>。< /P> 有关更多详细信息,请参阅

JPanel copying_panel = new JPanel();
copying_panel.setLayout(new GridBagLayout());
copying_panel.setBackground(new Color(200, 221, 242));
JLabel jl4 = new JLabel("From:", SwingConstants.CENTER);
JTextField jtf3 = new JTextField(10);
JLabel jl5 = new JLabel("To:", SwingConstants.CENTER);
JTextField jtf4 = new JTextField(10);
JButton jb2 = new JButton("Go");

GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
copying_panel.add(jl4, gbc);

gbc.gridy++;
copying_panel.add(jl5, gbc);

gbc.anchor = GridBagConstraints.EAST;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.gridx++;
gbc.gridy = 0;
copying_panel.add(jtf3, gbc);

gbc.gridy++;
copying_panel.add(jtf4, gbc);

gbc.anchor = GridBagConstraints.WEST;
gbc.fill = GridBagConstraints.NONE;
gbc.gridy++;
copying_panel.add(jb2, gbc);

jlabel和JTextFields太短了。我应该在它们上设置PreferredSize吗?当然不是。您可以通过
columns
属性向文本字段提供大小提示,如上面的示例所示,
new JTextField(10)
。您可以使用
GridBagConstraint#insets
调整每个组件周围的填充量。有关更多详细信息,请参阅。在长距离分离标签和字段时,我会小心,这可能会“断开”这两个组件,让用户感到困惑。您还可以使用gridbagconstraints的“weightx”值根据剩余空间调整textfield的大小。在这种情况下,您不会设置列。。。只需新建JTextField()即可。不过,需要有剩余的空间,否则文本字段的宽度为零。如果只有textfield应该展开,那么它的权重x将为1,而所有其他项的权重x将为0。(所有权重加起来应为1)@pcalkins这完全取决于您想要实现什么,使用
weightx
也意味着,如果您将组件调整为全屏大小,文本字段将占据组件的整个剩余空间,这可能不是您想要实现的,但是,使用列值对文本字段进行种子设定时,我们也会使用首选大小对其进行种子设定,但是,这一切都取决于您想要实现的目标。我还应该提到,您需要设置GridBagConstraints.fill,否则它也将是零宽度。。。我一直在使用定义宽度的滚动窗格,将视口设置为具有gridbaglayout的面板。。。在我的情况下,我需要某些按钮排列,和文本字段,以填补剩余的空间。。。我将文本字段的填充设置为GridBagConstraints.HORIZONTAL,它们占据了所有的权重X。。。我自己仍在学习如何处理Swing,因此使用这种方法可能会遇到更多问题。JLabels和JTextFields太短了。我应该在它们上设置PreferredSize吗?当然不是。您可以通过
columns
属性向文本字段提供大小提示,如上面的示例所示,
new JTextField(10)
。您可以使用
GridBagConstraint#insets
调整每个组件周围的填充量。有关更多详细信息,请参阅。在长距离分离标签和字段时,我会小心,这可能会“断开”这两个组件,让用户感到困惑。您还可以使用gridbagconstraints的“weightx”值根据剩余空间调整textfield的大小。在这种情况下,您不会设置列。。。只需新建JTextField()即可。不过,需要有剩余的空间,否则文本字段的宽度为零。如果只有textfield应该展开,那么它的权重x将为1,而所有其他项的权重x将为0。(所有权重加起来应为1)@pcalkins这完全取决于您想要实现什么,使用
weightx
也意味着,如果您将组件调整为全屏大小,文本字段将占据组件的整个剩余空间,这可能不是您想要实现的,但是,使用列值对文本字段进行种子设定时,我们也会使用首选大小对其进行种子设定,但是,这一切都取决于您想要实现的目标。我还应该提到,您需要设置GridBagConstraints.fill,否则它也将是零宽度。。。我一直在使用定义宽度的滚动窗格,将视口设置为具有gridbaglayout的面板。。。在我的情况下,我需要某些按钮排列,和文本字段,以填补剩余的空间。。。我将文本字段的填充设置为GridBagConstraints.HORIZONTAL,它们占据了所有的权重X。。。我自己仍在学习如何处理Swing,因此使用这种方法可能会遇到更多问题。JLabels和JTextFields太短了。我应该在它们上设置PreferredSize吗?当然不是。您可以通过
columns
属性向文本字段提供大小提示,如上面的示例所示,
new JTextField(10)
。您可以使用
GridBagConstraint#insets
调整每个组件周围的填充量。有关更多详细信息,请参阅。在长距离分离标签和字段时,我会小心,这可能会“断开”这两个组件,让用户感到困惑。您还可以使用gridbagconstraints的“weightx”值根据剩余空间调整textfield的大小。在这种情况下,您不会设置列。。。只需新建JTextField()即可。不过,需要有剩余的空间,否则文本字段的宽度为零。如果只有textfi