代码之家  ›  专栏  ›  技术社区  ›  Mike Caron

我可以只为jbutton类的一个子集设置buttonUI吗?

  •  1
  • Mike Caron  · 技术社区  · 14 年前

    我想创建一个button类,并使用buttonUI来呈现它,而不是重写paint组件方法。我不想将这个buttonUI用于所有jbuttons。有可能吗?我只见过 UIManager.put("ButtonUI","MyCustomButtonUI") 但这会影响所有jbutton呈现吗?是否可以限制看跌操作的范围?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Mark Peters    14 年前

    JButton.setUI(ButtonUI) 只为一个设置用户界面 JButton . 与工厂一起使用:

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

    编辑 :或者,因为您说它是某个子类的常量,所以只需调用 setUI() 来自该子类的构造函数。

    另一种选择 可能是重写方法 getUIClassID() 在你的子类中。本遗嘱 可能 允许您仍然使用 UIManager 选择要使用的样式,但我还没有测试过。

        2
  •  0
  •   Riduidel    14 年前

    好吧,你可以,在你的 ButtonUI 类,检查提供给您的真正组件类,并且只通过instanceof或任何其他机制覆盖所需子类的默认行为。

    但是,如果你像我一样不喜欢 instanceof 使用另一个技巧。当按钮子类jbutton时,它也子类jbutton和abstractbutton,允许您调用 AbstractButton#setUI 在构造器或其他地方,允许特定的渲染器,完全不同于LNF应用程序。