我在JFrame中有一个分形生成组件(JPanel的子类)。当用户调整窗口大小时,将分形更新为新大小需要相当长的时间。
我目前在JPanel上有一个ComponentListener,但每次用户在拖动窗口边框时移动鼠标时都会调用它的componentResized事件。这意味着分形被告知要多次调整大小,然后慢慢地(在几分钟内)增长到新的大小。
当用户释放鼠标按钮时,是否有通知方式,以便我只能在用户完成大小调整后更改分形大小?
其他人在将侦听器附加到JFrame时会发生reported这种情况,但由于某种原因,这对我(以及others)不起作用。
答案 0 :(得分:4)
您不必在每次收到接收事件时开始计算,而只能在使用计时器收到最后一个事件后开始计算,例如:在伪代码中(或者至少我在这里直接键入的代码,而不是在我的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();
}
}
你仍然可以将这与安德鲁斯的建议相结合,使用你伸展的图像,直到计算结束。
答案 1 :(得分:1)
您已查看HierarchyListener,您可以通过HierarchyEvent
ComponentListener
基本上没有任何问题,但您必须将预期事件包装到Swing Timer
,如果事件重复,只调用Timer#restart()
,从Swing Timer
输出{1}}应为Swing Action
答案 2 :(得分:0)
有点晚了,但看起来没有人找到正确的答案。我发现当您在窗口的ComponentListener(child.updateUI()
块)内调用componentResized
时,此子项会自行调整大小并更新其内容。使用计时器是不安全的。