JButton更新自己的isEnabled值

时间:2010-08-09 18:35:48

标签: java swing override jbutton

我正在尝试创建一个JButton组件的子类,它将根据条件启用或禁用自身(如下所示)

public interface Condition {
    public static final Condition TRUE  = new Condition() { 
                                          public boolean test() {
                                              return true;
                                          } };
    public static final Condition FALSE = new Condition() { 
                                          public boolean test() {
                                              return false;
                                          } };
    public boolean test();
}

但是,JButton代码都是基于私有存储在JButton类中的实际布尔值。我的问题是:可以覆盖哪个JButton方法来更新其存储的isEnabled布尔值(通过setEnabled(boolean))?它会更新(图形)吗?或重绘()?或其他一些功能?

编辑:意识到我正在尝试创建的实际上是不可能的,除非你有一个单独的线程等待很短的时间并强制按钮检查其状态(这是严重的,我不想做那)。事实是,按钮只是反应性的。无论谁使用按钮类,都可以通过一些开销来实现这一点,但是在这一点上,只需在实际更改的内容上编写侦听器并在该点切换按钮就更容易了。 Woops。

2 个答案:

答案 0 :(得分:1)

例如,DefaultButtonModel维护stateMask,其中包含启用状态的位。您可以相应地实现ButtonModel接口。

附录:作为替代方案,正如文章Key Bindings中所述,“Actions的另一个优点是,它们具有启用状态,可以轻松地禁用操作而无需跟踪它附属于哪个组件。“有关详情,请参阅How to Use Actions

答案 1 :(得分:1)

我强烈建议您使用Actions来实现此类功能。

您应该启用/禁用附加到按钮的操作。在Swing中,相同的操作可以与许多类型的组件相关联,例如按钮,菜单项等。通过禁用特定操作,您将自动禁用所有相关组件。

当您使用相同的一组操作的工具栏,上下文菜单等时,这将变得非常方便。