我正在制作一个小型日历应用程序以重新熟悉 Java Swing,并且我正在尝试使用
BoxLayout
来显示我按顺序添加的事件。我的事件显示一个在另一个之上,但我无法调整它们的大小。
我有一个
ArrayList
的 JButtons 称为 events
并且窗口的大小是 400x400px。我有这个代码:
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
if(events != null) {
for(JButton button : events) {
button.setMinimumSize(new Dimension(400, 400 / events.size()));
}
}
据我了解,
BoxLayout
应该还是尊重setMinimumSize()
,但好像不是。
按钮只是容纳文本的最小尺寸:
如果
BoxLayout
仍然尊重setMinimumSize()
,这些按钮会不会是框架的宽度,或者我做错了什么?
默认情况下,按钮的最小和最大尺寸设置为按钮的首选尺寸。最小尺寸应小于首选尺寸,首选尺寸应小于最大尺寸。
BoxLayout 将尝试以其首选大小绘制组件,但随着组件可用空间的减少/增加,同时考虑最小和最大尺寸。
最小尺寸用于控制当框架尺寸减小时按钮可以有多小。
最大尺寸用于控制增加边框尺寸时按钮可以变大
所以即使你设置了最小尺寸,最大尺寸没有改变所以按钮仍然显示在它的首选(最大)尺寸。
您需要覆盖最大尺寸,而不是最小尺寸,以填充框架中的额外空间。
for(JButton button : events) {
//button.setMinimumSize(new Dimension(400, 400 / events.size()));
button.setMaximumSize(new Dimension(400, 400 / events.size()));
}