我正在編寫自定義JComponent
,對於不同的外觀和感覺應該看起來不同。我打算至少有WindowsLookAndFeel
,MetalLookAndFeel
和MotifLookAndFeel
不同ComponentUi
類。使用自定義JComponents擴展現有Swing外觀和感覺
現在,雖然此任務看起來很簡單,但我無法找到如何使用我的自定義ComponentUi
類輕鬆擴展現有外觀。
我將如何去註冊正確的ComponentUi
爲不同的外觀和感覺?這可能嗎?如果不是,爲不同的外觀和感覺編寫自定義組件的首選方法是什麼?
更具體一點,此刻我重寫JComponent#updateUI
在我的自定義組件來設置不同的ComponentUi
實例:
@Override
public void updateUI() {
LookAndFeel feel = UIManager.getLookAndFeel();
if (feel instanceof WindowsLookAndFeel) {
setUI(MyWindowsCustomUi.createUI(this));
} else if (feel instanceof MotifLookAndFeel) {
setUI(MyMotivCustomUi.createUI(this));
} else if (feel instanceof MetalLookAndFeel) {
setUI(MyMetalCustomUi.createUI(this));
} else{
setUI(MyBasicCustomUi.createUI(this));
}
}
但這種做法似乎完全打敗的目的和外觀和感覺的有用性。我希望能夠將此更改爲以下:
public void updateUI() {
setUI((MyCustomUi)UIManager.getUI(this));
}
,這應該設置MyCustomUi
正確的子類爲當前的外觀和感覺。
我知道,我可以通過創建每個受支持的LookAndFeel
的自定義子類來輕鬆實現此目的,這些子類在例如註冊期間註冊相應的ComponentUi
。 BasicLookAndFeel#initComponentDefaults(UIDefaults)
- 但這不是我想要做的。
非常感謝你 - 我註冊使用'LookAndFeelAddons.contribute自定義組件() '來自SwingX,它就像一個魅力。 – Balder