我查看了所有其他答案,但他们都建议使用GroupLayout
,BoxLayout
,或者将使用GridBagLayout的面板与另一个使用其中一个的面板包装起来上面提到的布局。
我目前正在使用GridBagLayout,我想知道是否有办法设置面板的最大高度。我不希望限制宽度,只限高度,因此setMaximumSize(Dimension)
无法工作。
GridBagLayout是否以任何方式支持此功能?对不起,如果我的问题没有包含任何代码,我唯一可能找到的尝试是setMaximumSize(Dimension)
,或将其包装在另一个面板中(我希望避免)
答案 0 :(得分:4)
如果您只想限制一个维度,那么就不要限制另一个维度:
component.setMaximumSize( new Dimension(
Integer.MAX_VALUE,
requiredMaxHeigth
) );
答案 1 :(得分:1)
嗯,我想说几乎总是正确的解决方案是通过使用不同的布局管理器或使用不同的容器层次结构(或两者)来修复布局。
然而,既然你似乎没有被说服(我从你的问题推断出来),我可以建议解决你问的具体问题(同样,我会建议采取不同的方法来解决布局,这可能是你真正的问题。)
您可以通过覆盖setMaximumSize()
方法设置最大高度而不影响最大宽度,如下所示:
@Override
public void setMaximumSize(Dimension size) {
Dimension currMaxSize = getMaximumSize();
super.setMaximumSize(currMaxSize.width, size.height);
}
另一种方法可以是保持"重写"设置最大高度,并在返回最大高度时返回,如下所示:
private int overriddenMaximumHeight = -1;
public void setMaximumHeight(int height) {
overriddenMaximumHeight = height;
}
@Override
public Dimension getMaximumSize() {
Dimension size = super.getMaximumSize();
int height = (overriddenMaximumHeight >=0) ? overriddenMaximumHeight : size.height;
return new Dimension(size.width, height);
}
再次(最后),我建议采取更常见的方法,但如果你坚持......