2016-02-28 50 views
0

我在JFrame上有一些JPanel,並希望在程序運行時移動它們。 我的代碼有很多行,所以我不能粘貼它的全部內容,但這裏是移動發生的函數toggle的示例。JPanel在飛行中滑動

for(int h=frame.height; h<HEIGHT; h++){ 
    toolbar.setBounds(0, h, size.width, size.height); 
    try { 
     Thread.sleep(counter); 
    } catch (InterruptedException ex) { 
     Logger.getLogger(Scene.class.getName()).log(Level.SEVERE, null, ex); 
    } 
} 

從本質上講,我希望的JPanel從北方轉移到南方。

當我在初始化關閉程序 時調用此toggle函數,然後當我啓動它時,我可以看到JPanel正確移動。如果我添加一個keylistener,以便在程序運行時觸發JPanel移動,則會發生以下情況:程序在JPanel需要移動的時候不做任何事情,此後,我將JPanel看到它的最終位置。我應該在前面的示例中重新繪製jpanel的jframe還是什麼?

+0

我不認爲您發佈的代碼和文本足以讓我們能夠充分理解您的問題並回答它。如果您很快就沒有得到體面的答案,請考慮創建併發布[最小,完整和可驗證示例程序](http://stackoverflow.com/help/mcve)。 –

回答

1

在awt線程上調用keyListener。如果你嘗試從awt線程創建動畫,則不會發生任何事情,因爲swing會在awt線程上繪製。您需要爲動畫創建一個新線程並使用Swing.InvokeLater或類似來繪製動畫。

+0

或使用擺動計時器。 1+ –