为什么要使用JavaFX属性?

Waf*_*310 4 java javafx

请原谅我的问题,如果它看起来很愚蠢,但我很好奇.我正在制作一个Java程序,它将有一个GUI,并对整个属性的想法感到好奇.为什么在我们可以向类添加数据时使用它们?例如:

class myButton extends Button {

   private boolean booleanProperty = false;

   myButton(args...) {
      // Do something with the property
   }

   public void setProperty(boolean value) {
      this.booleanProperty = value;
   }

   public boolean getProperty() {
      return this.booleanProperty;
   }
}
Run Code Online (Sandbox Code Playgroud)

似乎工作得很好,可以存储关于按钮的自定义实现的其他信息.但是关于:

class myButton extends Button {

   private SimpleBooleanProperty booleanProperty = new SimpleBooleanProperty(false);

   myButton(args...) {
      // Do something with the property
   }

   public void setProperty(boolean value) {
      this.booleanProperty.set(value);
   }

   public boolean getProperty() {
      return this.booleanProperty.get();
   }
}
Run Code Online (Sandbox Code Playgroud)

唯一真正的区别,我看到(纠正我,如果我错了)是你可以将听众附加到属性值,但我觉得好像不仅仅是那个.想法?

Kis*_*kae 6

JavaFX属性的强大之处在于它们可以以一种在发生更改时自动更新UI的方式进行绑定.

例如,如果textField不包含任何值,请考虑要隐藏的元素:

TextField tf = ...
Node container = ...
container.visibleProperty.bind(tf.textProperty.isNotEmpty());
Run Code Online (Sandbox Code Playgroud)

现在,当您更改文本时tf,您将看到container根据文本的存在切换它是否可见.