2014-04-02 31 views
0

我正在製作微波模擬程序,並有一個惱人的問題。我想讓微波爐觀察窗口在按下按鈕時改變顏色,以可視化微波開啓。但是,因爲我在背景中也有一個帶有圖標(食物圖像)的jlabel,所以我需要背景爲半透明。我已經完成了爲jPanel(cookingWindow)添加一個alpha值。Java - 在背景上的圖形故障repaint

它開始像這樣

所以我已經基本上完成了設置一個ActionEvent與下面的代碼的啓動按鈕。
cookingWindow.setBackground(new Color (250,234,1, 150)); cookingWindow.repaint();

這工作,但出現這種情況

當我最小化和最大化窗口,一切都回到地方。但顯然,如果您不必將窗口最小化,那將是更可取的。有關如何阻止這個視覺錯誤的任何想法?

回答

2

查看Backgrounds With Transparency瞭解問題的解釋和一些解決方案。

基本上問題是Swing opaque屬性如何處理透明背景(它不)。

+0

感謝您的鏈接。迷惑我的部分是,當我最小化和最大化窗口時,它的工作原理也是我想要的。這是爲什麼? – user2773084

+0

@ user2773084這將涉及組件的繪製順序 – MadProgrammer

+0

@ user2773084,可能是因爲整個框架被重新繪製,所以所有的子組件都被繪製以便背景被正確地繪製。但是,當您更新標籤時,只有標籤因爲不透明而被重新繪製。 – camickr

-1

重新驗證和重新繪製jFrame似乎可以解決所有問題。我以前只重繪jPanel。

+0

-1,不是正確的解決方案。你的代碼打破了擺動組件之間的繪畫合約。我看到你沒有閱讀我在博客中提供的關於繪畫如何工作的更多細節的鏈接。不要採取捷徑。 – camickr

+0

重新繪製通常可以解決擺動+1中的問題 – khandelwaldeval