Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在netbeans中的JButton上使用Enabled属性_Java_Swing_Netbeans_Jbutton - Fatal编程技术网

Java 在netbeans中的JButton上使用Enabled属性

Java 在netbeans中的JButton上使用Enabled属性,java,swing,netbeans,jbutton,Java,Swing,Netbeans,Jbutton,我正在尝试使用默认CRUD数据库模板设置一个类似于“保存”按钮的按钮(该按钮仅在变量为true时才变为活动状态)。我已经查看了保存按钮的代码,并得出我需要: 与之链接的变量(在其情况下需要保存) 要运行的操作 我已经在另一个按钮上重新创建了这两个按钮,但它永远无法启用。我在另外两个按钮上有打印语句,用于将我的按钮链接到的变量设置为true和false,以便我可以看到值正在变化。 我是否错过了一些关键的步骤?这似乎应该是相当直截了当的 还有一件事,如果我在构造函数中将变量手动更改为true,然后运

我正在尝试使用默认CRUD数据库模板设置一个类似于“保存”按钮的按钮(该按钮仅在变量为true时才变为活动状态)。我已经查看了保存按钮的代码,并得出我需要:

  • 与之链接的变量(在其情况下需要保存)
  • 要运行的操作
  • 我已经在另一个按钮上重新创建了这两个按钮,但它永远无法启用。我在另外两个按钮上有打印语句,用于将我的按钮链接到的变量设置为true和false,以便我可以看到值正在变化。 我是否错过了一些关键的步骤?这似乎应该是相当直截了当的

    还有一件事,如果我在构造函数中将变量手动更改为true,然后运行应用程序,它会启用按钮,而false会禁用按钮,这样部件就可以工作,而不是更改

    如果有任何帮助,我将不胜感激,因为我在过去的几个小时里一直在尝试,但我无法找到答案

    谢谢

    需要以某种方式监视变量或“属性”,可能需要使用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);
       }
    
    }