Ich bin dabei, eine JavaFX-Anwendung von der Deklaration/Konfiguration ihrer Steuerelemente in Java-Code zum Aufteilen des Layouts in eine FXML-Konfiguration zu konvertieren. Das Problem, das ich habe, ist, dass ich das äquivalente Attribut (?) Zu dem ChangeListener des Codes nicht finden kann.Äquivalentes FXML-Attribut zu ChangeListener?
In dem ursprünglichen Java-Code, ich habe
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());
}
}
über den nächstgelegene ich FXML verwendet bekommen kann:
<TextField id="outputNameTextField" onKeyPressed="#textBoxOnChange" promptText="Path of merge file" GridPane.columnIndex="1" GridPane.rowIndex="3" GridPane.columnSpan="2" GridPane.rowSpan="1" />
Das Problem mit onKeyPressed ist, dass es Pickup klebt nicht in Werte wie ChangeListener tut. Wie füge ich einen Änderungslistener in FXML hinzu?
Ich glaube, ich bin nur verwirrt, warum ich ein onKeyPressed Ereignis hinzufügen kann, aber nicht ein OnChange-Ereignis in der FXML. Es scheint, als müsste ich beides tun können oder auch nicht. – Todd
Dies liegt nur daran, dass ein Änderungslistener nicht nur eine Funktion, sondern auch ein Listener für eine Eigenschaft ist. Es ist die Art, an Java FX zu denken. – PhilippeGeek
@PhilippeGeek Das Problem mit JavaFX ist seine Vielfalt. Sie können die Ereignisse von CheckBoxes mit onAction in FXML ändern (obwohl onAction auch eine Eigenschaft ist). Mit Spinner, TextAreas und vielen anderen können Sie jedoch nicht dasselbe tun. Ich wünschte, es gäbe einen gemeinsamen Supertyp "Feld" für all jene Komponenten, die einen Wert tragen. Und dieser Super-Typ sollte eine setOnValueChange-Methode und eine value-Eigenschaft haben. –