Java 在netbeans中的JButton上使用Enabled属性
我正在尝试使用默认CRUD数据库模板设置一个类似于“保存”按钮的按钮(该按钮仅在变量为true时才变为活动状态)。我已经查看了保存按钮的代码,并得出我需要:Java 在netbeans中的JButton上使用Enabled属性,java,swing,netbeans,jbutton,Java,Swing,Netbeans,Jbutton,我正在尝试使用默认CRUD数据库模板设置一个类似于“保存”按钮的按钮(该按钮仅在变量为true时才变为活动状态)。我已经查看了保存按钮的代码,并得出我需要: 与之链接的变量(在其情况下需要保存) 要运行的操作 我已经在另一个按钮上重新创建了这两个按钮,但它永远无法启用。我在另外两个按钮上有打印语句,用于将我的按钮链接到的变量设置为true和false,以便我可以看到值正在变化。 我是否错过了一些关键的步骤?这似乎应该是相当直截了当的 还有一件事,如果我在构造函数中将变量手动更改为true,然后运
谢谢需要以某种方式监视变量或“属性”,可能需要使用PropertyChangeSupport对象并允许其他对象向其添加PropertyChangeListener,使其成为“”。Swing应用程序有一个特殊的版本,它负责Swing事件线程,您可能希望使用它 编辑
你问
感谢您的回复,我想这就是firePropertyChange(“saveRequired”、!saveRequired、saveRequired)的功能;这是在做什么?这只是通知程序,还是我需要在某个地方捕获一个句柄。这是基于预先生成的代码,所以我不确定它是否在后台添加了一些内容 保存监视变量的类需要一个私有的SwingPropertyChangeSupport字段。您可以为它提供一个公共addPropertyChangeListener方法,允许其他类侦听它的绑定属性,类似这样(如果属性是字符串):
然后,任何想要侦听更改的类只需将PropertyChangeListener添加到此类的对象中,并根据需要响应更改。感谢您的回复,我假设这就是
firePropertyChange(“saveRequired”、!saveRequired、saveRequired)的内容代码>正在做,但这是在做什么?这只是通知程序,还是我需要在某个地方捕获一个句柄。这是基于预先生成的代码,所以我不确定它是否在后台添加了一些内容。谢谢你的帮助,我仍然看不到生成的代码是如何工作的,但我不在乎,我宁愿自己写代码,这样我就知道它是如何工作的。再次感谢您的帮助和挑剔;-)a) 不要在您的bean中创建事件,支持中有fire方法来处理它。b)始终在内部使用getter(而不是直接访问字段),特别是在获取事件的newValue时。找到了我最初问题的答案。我手动添加了属性更改支持,但没有意识到这一点。这一定覆盖了生成的代码。谢谢你的帮助。@kleopatra:一如既往地谢谢你的建议。我不确定我是否完全理解你的“a”点。你能详细说明一下吗?
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);
}
}