我在JFrame中有一个分形生成组件(JPanel的子类)。当用户调整窗口大小时,需要花费相当长的时间才能将分形更新为新的大小。

我目前在JPanel上有一个ComponentListener,但是每次用户在拖动窗口边框时移动鼠标都会调用它的componentResized事件。这意味着分形被告知要多次调整大小,然后(在几分钟的过程中)缓慢地增长到新的大小。

当用户释放鼠标按钮时,是否有一种通知方式,以便我只能在用户调整大小后更改分形大小?

其他人在将侦听器连接到JFrame时发生了reported的情况,但是由于某种原因,这对我(和others)不起作用。

最佳答案

只能在接收到最后一个事件之后才开始计算,而不是每次接收到事件都会开始计算。用伪代码(或至少我直接在此处而不是在我的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建议结合使用,以拉伸图像,直到计算完成为止。

09-30 20:05
查看更多