问题描述
面板下方有BoxLayout,底部的按钮不占用面板的宽度,而是在左侧和右侧有间隙。
JPanel panel = new JPanel();
BoxLayout Boxlayout = new BoxLayout(panel,BoxLayout.Y_AXIS);
panel.setLayout(Boxlayout);
JPanel framesPanel[] = new JPanel[8];
for(int i=0;i<8;i++) {
framesPanel[i] = new JPanel();
framesPanel[i].setLayout(new BoxLayout(framesPanel[i],BoxLayout.X_AXIS));
JButton jb1 = new JButton("Button 1");
jb1.setAlignmentX(Component.LEFT_ALIGNMENT);
JButton jb2 = new JButton("Button 2");
jb2.setAlignmentX(Component.LEFT_ALIGNMENT);
JButton jb3 = null;
framesPanel[i].add(jb1);
framesPanel[i].add(jb2);
if (i < 6) {
jb3 = new JButton("Button 3");
jb3.setAlignmentX(Component.LEFT_ALIGNMENT);
framesPanel[i].add(jb3);
}
panel.add(framesPanel[i]);
}
// Set size for the frame
panel.setSize(300,300);
frame.setSize(300,300);
// Set the window to be visible as the default to be false
frame.add(panel);
我尝试过 setAlignmentX(Component.LEFT_ALIGNMENT) 但这似乎没有任何效果。
解决方法
A BoxLayout
尊重组件的最大尺寸。
按钮的最大尺寸与其首选尺寸相同。
当您创建按钮时,您可以执行以下操作:
JButton button = new JButton(...);
Dimension maximum = button.getMaximumSize();
maximum.width = Integer.MAX_VALUE;
button.setMaximumSize( maximum );
注意:
如果您从不更改按钮的字体大小,这只是一个快速修复。对于正确的解决方案,您应该真正创建一个自定义按钮来扩展 JButton 并覆盖 getMaximumSize()
方法以返回上述大小。然后,如果按钮的属性动态更改,这将起作用。