有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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


共 (2) 个答案

  1. # 1 楼答案

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

        component.setMaximumSize( new Dimension(
                Integer.MAX_VALUE,
                requiredMaxHeight
        ) );
    
  2. # 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);
    }
    

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