我正在尝试创建一个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。
答案 0 :(得分:1)
例如,DefaultButtonModel
维护stateMask
,其中包含启用状态的位。您可以相应地实现ButtonModel
接口。
附录:作为替代方案,正如文章Key Bindings中所述,“Actions
的另一个优点是,它们具有启用状态,可以轻松地禁用操作而无需跟踪它附属于哪个组件。“有关详情,请参阅How to Use Actions。
答案 1 :(得分:1)
我强烈建议您使用Actions来实现此类功能。
您应该启用/禁用附加到按钮的操作。在Swing中,相同的操作可以与许多类型的组件相关联,例如按钮,菜单项等。通过禁用特定操作,您将自动禁用所有相关组件。
当您使用相同的一组操作的工具栏,上下文菜单等时,这将变得非常方便。