仅使用GroupLayout设置面板的最大高度(不使用setMaximumSize)

Vin*_*igh 5 java swing gridbaglayout grouplayout

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

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

GridBagLayout是否以任何方式支持此功能?对不起,如果我的问题不包含任何代码,我可能找到的唯一尝试是setMaximumSize(Dimension),或将其包装在另一个面板中(我希望避免)

Ole*_*hin 9

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

    component.setMaximumSize( new Dimension(
            Integer.MAX_VALUE,
            requiredMaxHeight
    ) );
Run Code Online (Sandbox Code Playgroud)


eth*_*far 2

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

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

您可以通过重写该方法来设置最大高度而不影响最大宽度,setMaximumSize()如下所示:

@Override
public void setMaximumSize(Dimension size) {
    Dimension currMaxSize = getMaximumSize();
    super.setMaximumSize(currMaxSize.width, size.height);
}
Run Code Online (Sandbox Code Playgroud)

另一种方法可以是保留最大高度的“覆盖”设置,并在返回最大高度时返回它,如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

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