在netbeans中使用JButton上的Enabled属性

时间:2011-12-01 20:23:59

标签: java swing netbeans jbutton

我正在尝试使用默认的CRUD数据库模板设置类似于保存按钮的按钮(如果变量为true,则该按钮仅变为活动状态)。我查看了保存按钮的代码并找出了我需要的内容:

  1. 用于链接它的变量(在其案例中为saveNeeded)
  2. 要执行的操作
  3. 我已经在另一个按钮上重新创建了这两个按钮,但它从不接缝以启用。我在其他2个按钮上打印语句我用来设置我的按钮链接到的变量为true和false所以我可以看到值正在改变。 我缺少一些关键步骤吗?这似乎应该是相当直接的。

    另外一件事,如果我在构造函数中将变量设置为true并且运行应用程序,则启用该按钮并将其禁用以禁用它以使该部分正常工作,而不是更改。

    任何帮助将不胜感激,因为我花了最后几个小时尝试,无法弄明白

    感谢

1 个答案:

答案 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添加到此类的对象中,并在其认为合适时响应更改。