Java - 在 GridBagLayout 中调整按钮大小

Java - Resize buttons in GridBagLayout

如何让按钮的高度大一点,左右栏的宽度保持相同的大小。我试过 weightx weighty heightx heighty 但是没有用。提前致谢。这是我的代码:

Container contentPane = getContentPane();
contentPane.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.insets = new Insets(20,20,20,20);
c.fill = GridBagConstraints.HORIZONTAL;
c.weightx = 1.0;

JButton back = new JButton("Back to previous menu");
c.gridx = 1;
c.gridy = 0;
contentPane.add(back,c);

JLabel welcome = new JLabel("Hi secretary, please select an action");
c.gridx = 0;
c.gridy = 0;
contentPane.add(welcome,c);

有更多的按钮定义代码,但它只是将它们自己定位在布局上。

不要设置按钮的首选大小。对于使用与您不同的桌面字体的用户,这将导致严重的视觉问题。

您应该让按钮定义自己的首选大小。增加首选高度的最佳方法是 GridBagConstraints.ipady:

c.ipady = 24;

另一种选择是使用 JButton.setMargin 为每个按钮提供额外的边距:

Insets margin = new Insets(12, 0, 12, 0);
back.setMargin(margin);
welcome.setMargin(margin);

强制左右两侧宽度相等比较困难。 GridBagLayout 无法做到这一点。 weightx 字段仅确定额外 space 的分布,当 window 比它需要的更宽以容纳所有子组件的首选尺寸时。如果列的开始宽度不同,将额外的 space 分配给 weightx 不会使它们的宽度相等。

就我个人而言,我认为强制两侧宽度相等不会增加任何价值。如果你坚持左右两侧宽度完全相等,你将不得不放弃使用 GridBagLayout。 SpringLayout可以做到,但是很难用。如果你愿意引入第三方依赖,像MiG Layout这样的东西或许可以做到。