我想创建一个按钮类并使用ButtonUI来渲染它而不是覆盖paint组件方法。我不想将这个ButtonUI用于所有JButton。那可能吗?我只见过UIManager.put("ButtonUI","MyCustomButtonUI")
,但是这会影响所有JButton渲染吗?是否可以限制放置操作的范围?
答案 0 :(得分:4)
JButton.setUI(ButtonUI)
只为一个JButton
设置了用户界面。与工厂一起使用:
public static JButton createStyledButton(String text) {
JButton button = new JButton(text);
button.setUI(STYLE_UI);
return button;
}
编辑:或者,既然你说它对某个子类来说是常量,那么只需从该子类的构造函数中调用setUI()
。
另一个替代可能是覆盖子类中的方法getUIClassID()
。这可能允许您仍然使用UIManager
来选择要使用的样式,但我还没有对其进行测试。
答案 1 :(得分:0)
好吧,你可以在你的ButtonUI类中检查给你的真实组件类,只通过instanceof或任何其他机制覆盖我们所需子类的默认行为。
但是,如果你像我一样,不喜欢反复拨打instanceof
使用另一种技巧。由于您的按钮是JButton的子类,它还是JButton和AbstractButton的子类,允许您在构造函数或其他地方调用AbstractButton#setUI
,允许特定的渲染器,完全不同于LnF应用程序。