当使用 ComponentListener 来获取调整大小事件的通知时,如果用户将窗口角拖动到新的大小,则会收到很多事件。
现在,我需要对调整大小事件进行一些昂贵的计算。如果这些情况经常发生,那就太多了。忽略大多数事件并只对最后一个事件做出反应是可以的(例如,如果用户释放鼠标按钮)。问题是,我不知道如何找出最后一个调整大小事件是什么。如果我采取天真的方法:
this.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(final ComponentEvent e) {
if (calculationInProgress){
return;
}
calculationInProgress= true;
doExpensiveCalculation();
calculationInProgress= false;
}
});
在最后一次计算之后,可能会进一步调整窗口的大小,因此计算与正确的最终尺寸不匹配。
有什么好的解决方案呢?