2013-06-28 51 views
8

我正在将JavaFX应用程序从Java代码中声明/配置其控件转换为FXML配置的布局。我遇到的问题是我无法找到代码的ChangeListener的等价属性(?)。ChangeListener的等价FXML属性?

在原来的Java代码,我有

class TextFieldChangeListener implements ChangeListener<String> { 
     private boolean isRequiredDataPresent() { 
      return outputNameTextField.getText().length() > 0 && numOfOutputFilesTextField.getText().length() > 0; 
     } 

     @Override 
     public void changed(ObservableValue<? extends String> observableValue, String s, String s2) { 
      mergeButton.setDisable(! isRequiredDataPresent()); 
     } 
    } 

关于我可以使用FXML最接近的是:

<TextField id="outputNameTextField" onKeyPressed="#textBoxOnChange" promptText="Path of merge file" GridPane.columnIndex="1" GridPane.rowIndex="3" GridPane.columnSpan="2" GridPane.rowSpan="1" /> 

使用onKeyPressed的问题是,它并没有在摄像粘贴像ChangeListener这样的值。如何在FXML中添加更改监听器?

回答

3

你不能这样做,因为value属性是TextField的子部分。所以你必须把它写在你的代码中。 FXML仅适用于图形方面。 有关FXML更多信息:

+6

我想我只是困惑,为什么我可以添加一个onKeyPressed事件,但在FXML不是onChange事件。看起来我应该能够做到两者兼得,或者两者都做不到。 – Todd

+2

这只是因为更改侦听器不仅是一个函数,而且是一个属性上的侦听器。这是思考Java FX的方式。 – PhilippeGeek

+2

@PhilippeGeek JavaFX的问题在于它的多样性。您可以使用FXML中的onAction来侦听更改CheckBoxes的事件(尽管onAction也是一个属性)。但是,你不能在Spinners,TextAreas和其他许多方面做同样的事情。我希望所有那些带有价值的组件都有一个通用的超类型“字段”。这个超类型应该有一个setOnValueChange方法和一个值属性。 –

相关问题