我有一个分形生成组件(JPanel的一个子类)在一个JFrame中。当用户调整窗口大小时,需要很长时间才能将分形更新到新的大小。
我目前在ComponentListener上有一个JPanel,但是每次用户拖动窗口边框时都会调用它的componentResized事件。这意味着分形被告知要多次调整大小,并且缓慢地(在几分钟内)增长到新的大小。
当用户释放鼠标按钮时,是否有一种通知方式,以便只有在用户完成调整大小时才能更改分形大小?
另一些人则在侦听器连接到JFrame时发生了这种情况,但由于某种原因,这对我(和其他)不起作用。
发布于 2012-04-19 14:22:06
与每次收到接收事件时开始计算不同,您只能在收到最后一个事件后使用计时器启动计算,例如使用伪代码(或者至少是我在这里直接输入的代码,而不是在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();
}
}你仍然可以把它和安德鲁斯的建议结合起来,使用一张图片,直到计算完成为止。
发布于 2012-04-19 14:10:47
ComponentListener基本上没有什么问题,但是您必须将预期的事件包装到Swing Timer,在事件重复的情况下,只能调用Timer#restart(),来自Swing Timer的输出应该是Swing Action。发布于 2013-12-25 01:00:18
现在有点晚了,但似乎没有人找到正确的答案。我发现,当您在窗口的一个child.updateUI() (componentResized块)中调用它时,这个子窗口会调整它的大小并更新它的内容。使用计时器是不安全的。
https://stackoverflow.com/questions/10229292
复制相似问题