我试图创建一个子类JButton组件的,这将使或者基于条件禁用本身(这看起来像下面)的JButton更新了自己的IsEnabled值
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))?它会更新(图形)?或repaint()?或者其他一些功能?
编辑:意识到我正在尝试创建的东西实际上是不可能的,除非您有一个单独的线程等待短时间并强制按钮检查其状态(这是严重的,我不想去做)。事实是,按钮只是被动的。使用按钮类的人可能会花费一些开销来完成这个任务,但是在那个时候,只要在实际上正在改变的任何事物上编写监听器并且在那一点上切换按钮会更容易。 Woops。
我结束了实现ButtonModel接口。这里的目标是在我正在处理的库中创建一个新的按钮类,它可以使其“isEnabled”标志成为条件语句,以便它自动打开和关闭。它现在正在工作,但它看起来并不正确。当文本禁用时,文本会变灰,但该按钮仍然显示其主图标(即不是“禁用”图标) – Isaac 2010-08-09 20:25:42
@Isaac:我必须同意@eugener,“Action”是更简单的方法。如果您使用'ButtonModel',则需要管理'EventListenerList'并在启用状态更改时执行'fireStateChanged()':http://download-llnw.oracle.com/javase/6/docs/api /javax/swing/event/EventListenerList.html – trashgod 2010-08-10 03:13:39