1

我正在尝试创建 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))?会是更新(图形)吗?或重绘()?或者其他一些功能?

编辑:意识到我要创建的实际上是不可能的,除非您有一个单独的线程等待很短的时间并强制按钮检查其状态(这很严重,我不想这样做)。事实上,按钮只是反应式的。使用按钮类的任何人都可以通过一些开销来完成此操作,但此时只需编写侦听器以了解实际发生的变化并在此时切换按钮会更容易。哎呀。

4

2 回答 2

1

我强烈建议使用Actions来实现这样的功能。

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

当您拥有具有相同操作集的工具栏、上下文菜单等时,这将变得非常方便。

于 2010-08-09T21:34:41.550 回答
1

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

附录:作为替代方案,正如文章Key Bindings中所述,“它们的另一个优点Actions是它们具有启用状态,这提供了一种简单的方法来禁用操作,而无需跟踪它附加到哪个组件。” 有关更多信息,请参阅如何使用操作

于 2010-08-09T18:58:27.230 回答