包装,但不要让它变小

Sta*_*lin 6 java swing pack

JFrameGridBagLayout.用户可以调整此窗口的大小.此外,他还可以执行一些更改窗口大小的编辑操作.我pack(); repaint();在这样的行动之后立即使用.但是,实际上我不应该在这样的操作之后使窗口更小 - 只是更大.我发现的解决方案是

    Dimension oldSize = getSize();
    pack();
    Dimension newSize = window.getSize();
    setSize(
            (int) Math.max(newSize.getWidth(), oldSize.getWidth()),
            (int) Math.max(newSize.getHeight(), oldSize.getHeight()));
    repaint();
Run Code Online (Sandbox Code Playgroud)

但我根本不喜欢这个解决方案.除了丑陋的代码,我们设置两次大小(一次一包而不是直接).还有其他解决方案吗?

Paŭ*_*ann 11

一个简单的解决方案是使用这样的东西:

frame.setMinimumSize(frame.getSize());
frame.pack();
frame.setMinimumSize(null);
Run Code Online (Sandbox Code Playgroud)

pack()我想这不会让窗户变小,只会变大.通过将最小尺寸重置为null之后pack()我们避免阻止用户在之后调整尺寸.

最后你不应该需要一个repaint(),尺寸变化应该自动触发重绘.(当然,请确保所有这些操作都发生在事件派发线程中.)