2013-02-28 48 views
1

如果执行动作(例如按下按钮),我该如何平滑移动JButton。这里是我的例子,但它不propely工作:JButton在动作上的平滑移动

public void actionPerformed(ActionEvent event) { 
    for(int i = 0; i<50; i++){ 
      ww.button.setLocation(ww.button.getLocation().x+1, ww.button.getLocation().y);//ww is a JFrame child 
     try { 
     Thread.sleep(20); 

    } catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 

    } 

后所执行的操作,我得到的20 * 50毫秒,按钮位置在以前的LOC + 50像素设置延迟,无中间位置。

+1

尝试使用布局。 – 2013-02-28 06:07:54

+0

什么是ww?你也使用多态为你的按钮。你能展示更多的代码吗? – RyanDawkins 2013-02-28 06:07:56

回答

3

在使用Swing时,请务必避免Thread。在你的代码中,它会让主要的EDT线程进入休眠状态,这就是为什么你无法查看中间位置的原因。试用这个,使用Swing Timer,你会得到它按预期工作。看看这里:How to Use Swing Timers并尝试使用Swing workers

+0

如果您正在使用布局管理器(并且您应该),则还应该注意,布局管理器将希望在父容器失效时将按钮移回其认为应该的位置,这可能会导致不需要的操作 – MadProgrammer 2013-02-28 06:13:18

+0

@ MadProgrammer是当容器自我重新验证/重新绘制时,它可能会根据其策略更改其子位置。 – 2013-02-28 06:14:36

+0

对不起哈利,这不是“在”你每说,只是“额外”:P – MadProgrammer 2013-02-28 06:15:19