Sono nel processo di conversione di un'applicazione JavaFX di dichiarare/configurare i propri controlli nel codice Java per dividere il layout per una configurazione FXML. Il problema che sto avendo è che non riesco a trovare l'attributo equivalente (?) Al ChangeListener del codice.Attributo FXML equivalente a ChangeListener?
Nel codice Java originale, ho
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());
}
}
Circa il più vicino posso ottenere utilizzando FXML è:
<TextField id="outputNameTextField" onKeyPressed="#textBoxOnChange" promptText="Path of merge file" GridPane.columnIndex="1" GridPane.rowIndex="3" GridPane.columnSpan="2" GridPane.rowSpan="1" />
Il problema con l'utilizzo onKeyPressed è che non pick-up incollato valori come ChangeListener. Come aggiungo un listener di modifiche in FXML?
Credo di essere solo confuso sul motivo per cui posso aggiungere un evento onKeyPressed, ma non un evento onChange nel FXML. Sembra che dovrei essere in grado di fare entrambi, o non fare né l'uno né l'altro. – Todd
È solo perché un listener di modifiche non è solo una funzione ma un listener su una proprietà. È il modo di pensare di Java FX. – PhilippeGeek
@PhilippeGeek Il problema con JavaFX è la sua diversità. Puoi ascoltare cambiare gli eventi di CheckBox usando onAction in FXML (sebbene onAction sia anche una proprietà). Tuttavia, non puoi fare lo stesso con Spinners, TextAreas e molti altri. Vorrei che ci fosse un comune tipo "campo" per tutti quei componenti che hanno un valore. E questo super tipo dovrebbe avere un metodo setOnValueChange e una proprietà value. –