我正在尝试使用默认的CRUD数据库模板设置类似于保存按钮的按钮(如果变量为true,则该按钮仅变为活动状态)。我查看了保存按钮的代码并找出了我需要的内容:
我已经在另一个按钮上重新创建了这两个按钮,但它从不接缝以启用。我在其他2个按钮上打印语句我用来设置我的按钮链接到的变量为true和false所以我可以看到值正在改变。 我缺少一些关键步骤吗?这似乎应该是相当直接的。
另外一件事,如果我在构造函数中将变量设置为true并且运行应用程序,则启用该按钮并将其禁用以禁用它以使该部分正常工作,而不是更改。
任何帮助将不胜感激,因为我花了最后几个小时尝试,无法弄明白
感谢
答案 0 :(得分:1)
需要以某种方式监视变量或“属性”,可能是通过使用PropertyChangeSupport对象并允许其他对象向其添加PropertyChangeListener,使其成为“bound property”。对于Swing应用程序,有一个特殊版本,它关注Swing事件线程SwingPropertyChangeSupport,您可能希望使用它。
修改强>
你问过
感谢您的回复,我认为这将是firePropertyChange(“saveNeeded”,!saveNeeded,saveNeeded);正在做但这是干嘛?这只是通知程序或我需要抓住这个地方的句柄。这是基于预生成的代码,所以我不确定它是否在后台添加了一些东西。
保存监视变量的类需要一个私有的SwingPropertyChangeSupport字段。你会给它一个公共的addPropertyChangeListener方法,你允许其他类监听它的绑定属性,如下所示(如果属性是一个String):
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.event.SwingPropertyChangeSupport;
public class Foo {
public static final String MY_BOUND_PROPERTY = "My Bound Property";
private SwingPropertyChangeSupport spcSupport = new SwingPropertyChangeSupport(
this);
private String myBoundProperty;
public void addPropertyChangeListener(PropertyChangeListener listener) {
spcSupport.addPropertyChangeListener(listener);
}
public void removePropertyChangeListener(PropertyChangeListener listener) {
spcSupport.removePropertyChangeListener(listener);
}
public String getMyBoundProperty() {
return myBoundProperty;
}
public void setMyBoundProperty(String myBoundProperty) {
Object oldValue = this.myBoundProperty;
Object newValue = myBoundProperty;
this.myBoundProperty = myBoundProperty;
PropertyChangeEvent pcEvent = new PropertyChangeEvent(this,
MY_BOUND_PROPERTY, oldValue, newValue);
spcSupport.firePropertyChange(pcEvent);
}
}
然后,任何想要监听更改的类只会将PropertyChangeListener添加到此类的对象中,并在其认为合适时响应更改。