5

我查看了所有其他答案,但他们都建议使用GroupLayout,BoxLayout或将使用 GridBagLayout 的面板与另一个使用上述布局之一的面板包装起来。

我目前正在使用 GridBagLayout,我想知道是否有办法设置面板的最大高度。我不想限制宽度,只限制高度,所以setMaximumSize(Dimension)行不通。

GridBagLayout 是否以任何方式支持这一点?抱歉,如果我的问题不包含任何代码,我可能会找到的唯一尝试是setMaximumSize(Dimension),或者将其包装在另一个面板中(我希望避免这种情况)

4

2 回答 2

9

如果您只想限制一个维度,那么不要限制另一个维度:

    component.setMaximumSize( new Dimension(
            Integer.MAX_VALUE,
            requiredMaxHeight
    ) );
于 2014-05-20T06:04:20.743 回答
2

好吧,我想说几乎总是正确的解决方案是通过使用不同的布局管理器或使用不同的容器层次结构(或两者)来修复布局。

但是,由于您似乎不会被说服(我从您的问题中推断出这一点),我可以为您提出的具体问题提出一个解决方案(再次,我建议采用不同的路径来修复布局,这可能是你真正的问题)。

您可以通过覆盖以下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);
}

再次(最后),我建议采取更常见的方法,但如果你坚持......

于 2014-05-20T05:45:29.323 回答