JButton 不会使用 BoxLayout 调整大小

问题描述 投票:0回答:1

我正在制作一个小型日历应用程序以重新熟悉 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()
,这些按钮会不会是框架的宽度,或者我做错了什么?

java swing jbutton java-11
1个回答
0
投票

默认情况下,按钮的最小和最大尺寸设置为按钮的首选尺寸。最小尺寸应小于首选尺寸,首选尺寸应小于最大尺寸。

BoxLayout 将尝试以其首选大小绘制组件,但随着组件可用空间的减少/增加,同时考虑最小和最大尺寸。

最小尺寸用于控制当框架尺寸减小时按钮可以有多小。

最大尺寸用于控制增加边框尺寸时按钮可以变大

所以即使你设置了最小尺寸,最大尺寸没有改变所以按钮仍然显示在它的首选(最大)尺寸。

您需要覆盖最大尺寸,而不是最小尺寸,以填充框架中的额外空间。

for(JButton button : events) {
    //button.setMinimumSize(new Dimension(400, 400 / events.size()));
    button.setMaximumSize(new Dimension(400, 400 / events.size()));
}
© www.soinside.com 2019 - 2024. All rights reserved.