2011-09-27 91 views
1

我有一個模式JDialog,我設置非透明與調用com.sun.awt.AWTUtilities方法,setWindowOpaque(this, false)AWTUtilities setWindowOpaque導致問題

當我將模態JDialog設置爲非透明時,會遇到問題。例如,當我點擊一個不透明的對話框時,它會彈出正確的對話框,但是在打開和關閉對話框之後,它會打開。它不可見;而且,由於它是模態的,我們不能點擊父面板中包含的按鈕。就像它被凍結,但那只是因爲模態對話。

如果我刪除了對方法setWindowOpaque(this, false)的調用,它的工作原理沒有任何問題。

有誰知道發生了什麼事?

我在Windows XP上使用Java版本「1.6.0_26」。

謝謝。

+2

我建議您創建併發布[SSCCE](http://sscce.org) –

+1

* AWTUtilities .. Java版本「1.6.0_26」* Java 6 J2SE中沒有AWTUtilities。你是指一個'sun'或'com.sun'類,Java 7還是其他的東西? –

+1

另請參見[如何創建半透明和成形的Windows](http://java.sun.com/developer/technicalArticles/GUI/translucent_shaped_windows/)。 – trashgod

回答

0

好的,有類似的問題,有時窗口沒有響應,或透明度被打破...奇怪的問題。

的解決方案,至少對我來說,在呼喚new TransparentWindow()invokeLater

SwingUtilities.invokeLater(new Runnable() { 
    @Override 
    public void run() { 
     TransparentWindow w = new TransparentWindow(); 
     w.setVisible(true); 
    } 
}); 

TransparentWindow是擴展的JWindow類使用com.sun.awt.AWTUtilities.setWindowOpaque(window,false);按此處的說明來創建圓角透明圓角的透明窗口:Soft clipping and per-pixel translucency for Swing windows