使用ComponentAdapter确定何时完成帧大小调整

时间:2014-01-04 18:49:07

标签: java swing resize jframe componentlistener

我正在使用一个简单的ComponentAdapter来调整它添加到的主JFrame窗口的大小。它正在没有问题地接收事件,但是我只想在用户完成调整大小后才采取行动。 componentResized()方法为调整大小的每个像素更改触发多个事件,我不希望这样,因为我需要在调整窗口大小时缩放图像,并且当它为每个像素完成时会产生巨大的延迟。 / p>

我尝试在帧上使用MouseListener来检测鼠标上下事件,以设置一个布尔值,确定它当前是否正在调整大小,但事件从未被触发。

这是简单的ComponentAdapter:

private class ResizeListener extends ComponentAdapter {     
        public void componentResized(ComponentEvent e) {
            onResize();
        }
    }

使用this.addComponentListener(new ResizeListener());将它添加到构造函数的框架中。该类正在扩展JFrame,因此应将其添加到框架中。我尝试使用getContentPane().addComponentListener(new ResizeListener());,但这没有任何区别。

有关在窗口实际完成大小调整时仅运行componentResized()方法的简单或有效方法的任何建议,我们将不胜感激。

目标

我正在实现一个PDF阅读器,目前将正在查看的页面转换为BufferedImage。当用户调整窗口大小时,我需要适当地缩放图像,这意味着我不能让布局管理员为我照顾。 componentResized事件的数量会在为用户调整大小路径上的每个位置调整图像大小时产生巨大延迟,因此我需要在调整大小完成后执行此操作。

1 个答案:

答案 0 :(得分:3)

Toolkit.getDefaultToolkit().setDynamicLayout(false);

这将影响应用程序中的所有窗口,因此如果您只需要特定帧的此功能,您可能还需要向框架添加WindowListener,然后处理windowActivated / windowDeactivated事件以设置此属性。