我可以只为JButton类的子集设置ButtonUI吗?

时间:2010-06-04 14:11:18

标签: java swing user-interface

我想创建一个按钮类并使用ButtonUI来渲染它而不是覆盖paint组件方法。我不想将这个ButtonUI用于所有JButton。那可能吗?我只见过UIManager.put("ButtonUI","MyCustomButtonUI"),但是这会影响所有JButton渲染吗?是否可以限制放置操作的范围?

2 个答案:

答案 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应用程序。