【问题标题】:Set only maximum height for a panel (without using setMaximumSize) with GroupLayout使用 GroupLayout 仅设置面板的最大高度(不使用 setMaximumSize)
【发布时间】:2014-07-08 05:46:19
【问题描述】:

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

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

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

【问题讨论】:

  • 请记住,尺寸提示只是提示。布局管理器可以忽略它们...

标签: java swing gridbaglayout grouplayout


【解决方案1】:

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

    component.setMaximumSize( new Dimension(
            Integer.MAX_VALUE,
            requiredMaxHeight
    ) );

【讨论】:

  • 这...这实际上是一个很好的解决方案!
【解决方案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);
}

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

【讨论】:

    猜你喜欢
    • 2017-03-14
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多