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中添加更改监听器?
我想我只是困惑,为什么我可以添加一个onKeyPressed事件,但在FXML不是onChange事件。看起来我应该能够做到两者兼得,或者两者都做不到。 – Todd
这只是因为更改侦听器不仅是一个函数,而且是一个属性上的侦听器。这是思考Java FX的方式。 – PhilippeGeek
@PhilippeGeek JavaFX的问题在于它的多样性。您可以使用FXML中的onAction来侦听更改CheckBoxes的事件(尽管onAction也是一个属性)。但是,你不能在Spinners,TextAreas和其他许多方面做同样的事情。我希望所有那些带有价值的组件都有一个通用的超类型“字段”。这个超类型应该有一个setOnValueChange方法和一个值属性。 –