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



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

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

这是一个简单的组件适配器:

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

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

任何关于在窗口实际完成调整大小时仅运行componentResized()方法的简单或有效方法的建议都将受到赞赏。

目标

我正在实现一个PDF阅读器,它可以将正在查看的页面转换为BufferedImage。当用户调整窗口大小时,我需要适当地缩放图像,这意味着我不能让布局经理替我处理。组件调整大小事件的数量会产生巨大的滞后,因为图像在用户调整大小路径上的每个位置都被调整大小,所以我需要在调整大小完成后进行调整。

Toolkit.getDefaultToolkit().setDynamicLayout(false);

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

最新更新