2013-02-28 93 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