2012-03-09 41 views
6

有沒有辦法改變一個擺動組件(例如JPanel)的所有實例的默認背景繪畫使用漸變背景進行繪製?或者我需要創建一個帶有漸變顏色的JPanel的擴展,然後在我的應用程序的任何地方使用它來代替JPanel?擺動組件的默認漸變背景

+0

難道你只需要爲後臺JPanel執行此操作,然後使所有其他JPanel不透明? – 2012-03-09 14:43:04

+0

@HovercraftFullOfEels,這也是另一種選擇。如果我想將它擴展到其他組件,我想我仍然需要擴展這些組件。 – 2012-03-09 15:03:26

+0

@JeffStorey:也許,但不一定。您可以通過一些簡單的工廠方法來創建您的JPanel,這些方法將opaque設置爲false,或者您可以通過GUI將所有非基本JPanel設置爲非透明。 – 2012-03-09 15:10:30

回答

3

恕我直言,只是繼承Swing組件並重寫它的paintComponent方法來進行漸變繪畫會更容易。然後,如您所說,在整個應用程序中使用此自定義組件。

使用UI屬性可能會非常棘手,因爲它們在所有LaF中可能都不一致。

+0

這是我最初的想法。不知道是否有更簡單的方法來做到這一點。特別是如果我想將漸變應用於多種組件類型,我需要繼承所有組件。 – 2012-03-09 14:41:31

+0

@JeffStorey,在這種情況下,也許最好是繼承'JComponent'。 – Moonbeam 2012-03-09 14:47:05

+0

我不確定這將如何幫助多種組件類型。假設我正在改變一個按鈕的背景,那麼如何繼承JComponent的幫助呢? – 2012-03-09 15:04:32

0

目前尚不完全清楚您打算的範圍。你的意思是(所有JPanel實例都遵循新的繪圖方案),還是你的意思是所有組件在一個容器中(例如框架中的所有內容)?

根據組件類別,您可以鉤入的位置是外觀和感覺,以及在組件實例基礎上,可以使用paintComponent()方法,或者如果您需要替換現有組件的標準外觀,因爲您無法覆蓋該方法,因爲您無法控制該方法,因爲在創建組件後提供自己的UI類(查看Component.setUI)。

除了覆蓋paintComponent方法,這兩個方法都不易實現。對於大多數應用程序來說,簡單的方法是最好的:)