2010-06-04 32 views
1

我想創建一個按鈕類並使用ButtonUI來渲染它,而不是重寫paint組件方法。我不想爲所有的JButton使用這個ButtonUI。那可能嗎?我只見過UIManager.put("ButtonUI","MyCustomButtonUI"),但這會影響所有JButton渲染嗎?是否可以限制放置操作的範圍?我可以僅爲JButton類的子集設置ButtonUI嗎?

回答

4

JButton.setUI(ButtonUI)將UI設置爲僅一個JButton。使用連同工廠:

public static JButton createStyledButton(String text) { 
    JButton button = new JButton(text); 
    button.setUI(STYLE_UI); 
    return button; 
}  

編輯:或者,因爲你說這是一定的子類不變,只需撥打setUI()從構造該子類。

另一種替代可能會覆蓋子類中的方法getUIClassID()。這將可能允許您仍然使用UIManager來選擇使用哪種樣式,但我沒有測試它。

0

那麼,你可以在你的ButtonUI類中檢查給出的真實的組件類,並且只通過instanceof或任何其他機制覆蓋我們想要的子類的默認行爲。

但是,如果您像我一樣不喜歡重複撥打instanceof,請使用另一種方法。由於按鈕是JButton的子類,因此它也是JButton和AbstractButton的子類,允許您在構造函數或其他位置調用,從而允許特定的渲染器,它完全不同於LnF應用程序。

相關問題