好吧,我想说几乎总是正确的解决方案是通过使用不同的布局管理器或使用不同的容器层次结构(或两者)来修复布局。
但是,由于您似乎不会被说服(我从您的问题中推断出这一点),我可以为您提出的具体问题提出一个解决方案(再次,我建议采用不同的路径来修复布局,这可能是你真正的问题)。
您可以通过覆盖以下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);
}
再次(最后),我建议采取更常见的方法,但如果你坚持......