我在 JFrame 中有一个分形生成组件(JPanel 的子类)。当用户调整窗口大小时,将分形更新为新大小需要相当长的时间。
我目前在 JPanel 上有一个 ComponentListener,但是每次用户在拖动窗口边框时移动鼠标时都会调用它的 componentResized 事件。这意味着分形被告知多次调整大小,并缓慢(在几分钟内)增长到新的大小。
有没有办法在用户释放鼠标按钮时得到通知,以便我只能在用户完成调整大小时更改分形大小?
我在 JFrame 中有一个分形生成组件(JPanel 的子类)。当用户调整窗口大小时,将分形更新为新大小需要相当长的时间。
我目前在 JPanel 上有一个 ComponentListener,但是每次用户在拖动窗口边框时移动鼠标时都会调用它的 componentResized 事件。这意味着分形被告知多次调整大小,并缓慢(在几分钟内)增长到新的大小。
有没有办法在用户释放鼠标按钮时得到通知,以便我只能在用户完成调整大小时更改分形大小?
而不是每次收到接收事件时开始计算,您只能在收到最后一个事件后使用计时器开始计算,例如在伪代码中(或者至少是我在此处直接键入而不是在我的IDE)
private Timer recalculateTimer = new Timer( 20, myRecalculateActionListener );
constructor(){
recalculateTimer.setRepeats( false );
}
@Override
public void componentResized(ComponentEvent e){
if ( recalculateTimer.isRunning() ){
recalculateTimer.restart();
} else {
recalculateTimer.start();
}
}
您仍然可以将此与 Andrews 的建议结合使用,以使用您拉伸的图像,直到计算实际完成。
您已经查看了HierarchyListener,您可以在其中使用HierarchyBoundsListener的接口监听HierarchyEvent
基本上没有错ComponentListener
,但是您必须将预期的事件包装到Swing Timer
,在事件重复的情况下,只能调用Timer#restart()
,输出Swing Timer
应该是Swing Action
有点晚了,但似乎没有人找到正确的答案。我发现当您在窗口child.updateUI()
的 ComponentListener (componentResized
块) 内调用时,这个孩子会自行调整其大小并更新其内容。使用计时器是不安全的。