当我的一个组件(一个画布)调整大小时,我需要做一些计算。不幸的是,计算可能需要几百毫秒,这导致调整大小在完成时严重滞后。我想通过仅在调整大小结束时进行计算来解决这个问题(我想当鼠标按钮被释放时)。我怎样才能做到这一点?到目前为止,我只有以下内容:
MyComponent.addComponentListener(new ComponentAdapter() {
@Override
public void componentResized(ComponentEvent e) {
super.componentResized(e);
// some calculation
}
});
感谢。
PS:我知道对于JFrame,只有在释放鼠标按钮后才会触发resized事件,但遗憾的是我无法将我的Component放入JFrame或扩展JFrame。
答案 0 :(得分:4)
然后你可以启动javax.swing.Timer一些延迟,并在调整大小时只重启Timer 通过调用Action或AbstractAction,您可以计算任何内容并输出到 GUI将在EDT
答案 1 :(得分:0)
您可以在componentResized()
中设置一个标记,并让MouseListener
执行实际工作。
答案 2 :(得分:0)
我会像这样做一个MouseListener:
public class MouseHandler implements MouseListener
{
public void mousePressed(MouseEvent e)
{
if(!running)
{
thread = new Thread(this);
thread.start();
running = true;
}
}
public void mouseReleased(MouseEvent e)
{
running = false;
thread = null
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void run()
{
while(running)
{
try
{
//repaint the component or move it or somthing.
Thread.sleep(1000);
// repaint delay
}catch(Exception e){e.printStackTrace();}
}
}
Thread thread;
boolean running;
}
如果要更改组件的位置
,可以输入MouseMotionListener