包装,但不要让它变小

时间:2011-06-26 17:50:36

标签: java swing pack

JFrame GridBagLayout。用户可以调整此窗口的大小。此外,他还可以执行一些更改窗口大小的编辑操作。在此类操作之后我现在使用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();

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

2 个答案:

答案 0 :(得分:11)

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

frame.setMinimumSize(frame.getSize());
frame.pack();
frame.setMinimumSize(null);

我认为这不允许pack()使窗口变小,只会变大。 通过在null之后将最小尺寸重置为pack(),我们可以避免用户在之后缩小尺寸。

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

答案 1 :(得分:0)

您可以覆盖pack()方法来执行此操作。不确定是否有更好的方法。