2011-03-08 59 views
1

我將JWindow的背景設置爲完全透明。然後,我在paint-Method中繪製了一個圓角的Rectangle(RGB:0,0,0,100),並向JWindows ContentPane添加了一個JLabel。但是當我嘗試重新繪製JWindow來更新JLabel時,它不會刪除舊的Rectangle和JLabel的舊值。所以結果是我的自定義工具提示框(它應該是什麼)變得不那麼透明,並且你無法讀取JLabels內容,因爲它覆蓋了舊的內容。JLabel在透明的畫矩形?

有什麼辦法可以解決這個問題嗎?如果我不重繪,它不會變得不那麼透明,但是當我重繪時,我的JLabel的新內容覆蓋了舊內容,就像它一樣。

回答

1

首先,您應該覆蓋paintComponent而不是paint並致電super.paintComponent(g)。您應該讓JWindow不透明,因爲最後一層的組件會清除舊內容。如果所有圖層都是透明的,則最終會出現屏幕垃圾。

參見painting with Swing。也許你真的想創建translucent windows

+0

是的,我想創建半透明窗口,但我認爲它不適用於Mac OS 10.6.6。 – esanits

+0

JWindow沒有'paintComponent(Graphics g)',但它有'paintComponents(Graphics g)'。但是當我重寫它不會畫任何東西? – esanits

+0

我認爲內容窗格是一個'JPanel',因此您可以將內容塗料設置爲您自己定製的'JPanel'並覆蓋'paintComponent()'。問題'我如何在Mac OS上創建半透明窗口?'絕對值得問IMO。 –