2008-09-02 31 views
5

在展示模態JDialog之前繪製簡單動畫的最佳方式是什麼? (即從鼠標點擊點擴展到對話框位置的邊界)。我認爲可以在對話框的setVisible方法上繪製父框架的玻璃窗格。但是由於JDialog是父項的模式,因此在JDialog變得可見之前,由於EDT上的當前事件尚未完成,我找不到將繪圖事件抽入EDT的方法。在展示JDialog時繪製動畫

回答

1

您是否嘗試單獨顯示JDialog的annimation?爲了正確設置訂單,您可能需要將這些操作綁定到一次傳遞給EDT的可運行內容中。

如:

SwingUtilities.invokeLater(new Runnable(){ 
    public void run(){ 
     doAnnimation(); 
     showDialog(); 
    } 
} 

這可能是最好的子類的JDialog,這樣就可以只調用父類實現之前添加doAnnimation()邏輯來調用setVisible(..)或show()方法。

最後,我想你需要手動設置dalog的尺寸 - 我不記得Java是否會在顯示對話框前知道對話框的實際大小,因此您可能會收到一些無用信息如果您在顯示大小之前查詢大小,則可以使用您的annimation

0

您或許可以接受@ rcreswick的答案並稍微擴展一下,以使其工作。

void myShowDialog() { 
    new Thread(new Runnable() {public void run() { 
    SwingUtilities.invokeAndWait(new Runnable() { public void run() { 
     doAnimation(); 
    } }); 
    // Delay to wait for the animation to finish (if needed) 
    Thread.sleep(500); 
    SwingUtilities.invokeAndWait(new Runnable() { public void run() { 
     showDialog(); 
    } }); 
    } }).start(); 
} 

這實在是太醜陋,將建立一個基本的ShowDialog()調用的被調用,但它應該工作。