我想創建一個帶有許多JPanel和部分文本,所有這些都有默認顏色(面板有白色背景,文本是黑色)的JFrame。我希望允許用戶在運行時動態更改這些內容,因此我實現了一個JColorChooser對話框,在該對話框中可以單擊按鈕,顯示對話框,然後從中保存顏色。更改組件的背景顏色參考顏色變量java
我的默認顏色設置在實例變量,像這樣:
private Color panelColor;
private Color textColor;
要設置我的面板的背景顏色,我用:
JPanel samplePanel = new JPanel();
samplePanel.setBackground(panelColor); //panelColor has already been instantiated
這工作得很好,使得面板白色。但是,當我嘗試使用JColorChooser加載新的Color以供使用時,面板不會更改。選擇我一個顏色後使用的代碼是:
if(newColor != null)
{
panelColor = newColor;
myFrame.repaint();
}
我所有的組件是一個JFrame的裏面,我還以爲調用重繪()上的JFrame將依次調用paintChildren()和級聯一路降到最低水平。
我相信我的問題在於我瞭解如何在Java中處理對象。我知道對象是通過引用傳遞的,但我也假設當我設置組件的背景顏色時,這是通過傳遞參考方案實現的,我開始懷疑它。當我調用setBackground()時,通過傳遞值傳遞的Color參數是否作爲副本結束?
如果我的預感是正確的,這是否意味着我應該寫一個方法,它包含所有需要更改背景的組件,並調用每個組件的setBackground(),將Color變量傳遞給新值?
乾杯
是的,你可能需要在每個對象上調用'setBackground()'。或者使用透明(非不透明)組件,只設置其父面板的背景,但透明度可能會非常棘手。有些物體依靠不透明來正確擦除視口。 – markspace
嗯,在這種情況下,似乎最好調用每個組件的setBackground(),即使它需要一段時間。我會避免與透明度解決方案混淆,我有一個相當繁忙的用戶界面,所以很可能我很快就會搞砸了。 – Stevo