我看了看所有其他的答案,但他们都建议使用GroupLayout
, BoxLayout
,或者用使用上述布局之一的另一个面板包装使用griddbaglayout的面板。
我目前正在使用GridBagLayout,我想知道是否有一种方法来设置面板的最大高度。我不想限制宽度,只有高度,所以setMaximumSize(Dimension)
不会工作。
GridBagLayout是否支持这种方式?对不起,如果我的问题不包含任何代码,我唯一能找到的尝试是setMaximumSize(Dimension)
,或将其包装在另一个面板(我希望避免)
如果你只想限制一个维度,那就不要限制另一个维度:
component.setMaximumSize( new Dimension(
Integer.MAX_VALUE,
requiredMaxHeight
) );
好吧,我想说几乎总是正确的解决方案是通过使用不同的布局管理器或使用不同的容器层次(或两者兼而有之)来修复布局。
然而,既然你似乎不会被说服(我从你的问题中推断),我可以对你提出的具体问题提出一个解决方案(再次,我建议采取不同的路径来修复布局,这可能是你真正的问题)。
您可以通过重写setMaximumSize()
方法来设置最大高度而不影响最大宽度,如下所示:
@Override
public void setMaximumSize(Dimension size) {
Dimension currMaxSize = getMaximumSize();
super.setMaximumSize(currMaxSize.width, size.height);
}
另一种方法是保留最大高度的"overridden"设置,并在返回最大高度时返回它,如下所示:
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);
}
再次(最后),我建议采用更常见的方法,但如果您坚持…