我正在查看How To Use BoxLayout文档,其中明确指出
如果没有任何组件具有最大宽度,该怎么办?在这种情况下,如果 所有组件都具有相同的X对齐,然后所有组件都是 和容器一样宽。
我们假设我们正在向JButton
添加大量JPanel
个实例。如果这些按钮的最大宽度为无,并且我们在所有这些按钮上调用setAlignmentX(Component.LEFT_ALIGNMENT)
- 那么这些按钮中的每一个都应该延伸到整个行。文档甚至使用下图说明了这一点。
我无法让它发挥作用!
我已尝试在按钮上执行setMaximumSize(null
)和setMaximumSize(new Dimension(-1,-1))
以及setMaximumSize(new Dimension(0,0))
,但没有任何内容可以解释我所描述的行为。
当文件说明时,文件的含义是什么:
如果没有任何组件具有最大宽度怎么办?
无最大宽度是多少?
我能够生产的最好的是以下。阅读文档我希望按钮应该能够在整个行中伸展。我知道我也可以使用其他布局管理器,但我希望用BoxLayout
实现这一点(授权文档是对的/我已经理解了文档权限。)
public class CustomList extends JPanel {
private final Box box = Box.createVerticalBox();
public CustomList() {
for (int i = 0; i < 10; i++) {
JButton b = new JButton("Button item" + i);
//b.setMaximumSize(new Dimension(0,0));
b.setAlignmentX(Component.LEFT_ALIGNMENT);
box.add(b);
}
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(box, BorderLayout.CENTER);
}
public static void main(String[] args) {
CustomList l = new CustomList();
l.setSize(200, 200);
l.setBackground(Color.red);
JFrame frame = new JFrame("Vertical Box");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(l, BorderLayout.CENTER);
frame.setSize(300, 200);
frame.setVisible(true);
}
}
答案 0 :(得分:2)
您的按钮实际上有最大宽度。
您可以做的是在循环中使用JPanel
创建BorderLayout
个对象,将每个按钮添加到每个面板(至BorderLayout.CENTER
,这是默认值)。
BorderLayout.CENTER
并不关心其子Component
的最大尺寸,因此最终会得到JPanel
,其全部内容由JButton
填充
由于JPanel
本身有一个巨大的默认最大大小new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)
(这是宽度= 32767,高度= 32767 !!),这是Component
的默认最大大小,你将得到预期的结果:
public CustomList() {
for (int i = 0; i < 10; i++) {
JPanel panel = new JPanel(new BorderLayout());
JButton b = new JButton("Button item" + i);
//b.setMaximumSize(new Dimension(0,0));
b.setAlignmentX(Component.LEFT_ALIGNMENT);
panel.add(b);
box.add(panel);
}
setLayout(new BoxLayout(this, BoxLayout.PAGE_AXIS));
add(box, BorderLayout.CENTER);
}