使用 ComponentAdapter 确定 Frame Resize 何时完成

Lad*_*tel 3 java swing resize jframe componentlistener

当添加到的主 JFrame 窗口调整大小时,我使用一个简单的 ComponentAdapter 来执行某些操作。它可以毫无问题地获取事件,但我只想在用户完成调整大小后采取行动。该componentResized()方法会为调整大小的每个像素更改触发多个事件,但我不希望这样,因为我需要在调整窗口大小时缩放图像,并且当对每个像素完成此操作时,会产生巨大的滞后。

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

这是简单的 ComponentAdapter:

private class ResizeListener extends ComponentAdapter {     
        public void componentResized(ComponentEvent e) {
            onResize();
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

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

目标

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

cam*_*ckr 5

Toolkit.getDefaultToolkit().setDynamicLayout(false);
Run Code Online (Sandbox Code Playgroud)

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