Java - 在GridBagLayout中调整大小按钮

时间:2016-11-08 16:23:46

标签: java awt layout-manager 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);

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

Picture

1 个答案:

答案 0 :(得分:0)

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

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

c.ipady = 24;

另一种选择是使用JButton.setMargin为每个按钮增加一个余量:

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

迫使左侧和右侧具有相等的宽度更加困难。 GridBagLayout无法做到这一点。 weightx字段仅在窗口宽于需要时才确定额外空间的分布,以便容纳所有子组件的首选大小。如果列的宽度不同,则使用weightx分配额外空格将不会使其宽度相等。

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