Jestem w trakcie konwertowania aplikacji JavaFX z deklarowania/konfigurowania jej kontrolek w kodzie Java do podziału układu na konfigurację FXML. Problem, który mam, polega na tym, że nie mogę zlokalizować równoważnego atrybutu (?) Do zmiennej ChangeListener kodu.Równoważny atrybut FXML do ChangeListener?
W oryginalnego kodu Java, mam
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());
}
}
O najbliżej mogę uzyskać stosując FXML jest:
<TextField id="outputNameTextField" onKeyPressed="#textBoxOnChange" promptText="Path of merge file" GridPane.columnIndex="1" GridPane.rowIndex="3" GridPane.columnSpan="2" GridPane.rowSpan="1" />
Problem z użyciem onKeyPressed jest to, że nie pickup wklejony w wartości takie jak ChangeListener. Jak dodać detektor zmian w FXML?
Chyba jestem po prostu mylić, dlaczego mogę dodać onKeyPressed zdarzenie, ale nie zdarzenie onChange w FXML. Wygląda na to, że powinienem być w stanie zrobić jedno i drugie. – Todd
Jest tak tylko dlatego, że detektor zmian jest nie tylko funkcją, ale detektorem w usłudze. To sposób myślenia o Java FX. – PhilippeGeek
@PhilippeGeek Problem z JavaFX polega na jego różnorodności. Możesz słuchać zmian zdarzeń CheckBox przy użyciu onAction w FXML (chociaż onAction jest także właściwością). Jednak nie można zrobić tego samego z Spinners, TextAreas i wieloma innymi. Szkoda, że nie byłoby powszechnego super typu "Pole" dla wszystkich składników, które mają wartość. A ten supertyp powinien mieć metodę setOnValueChange i właściwość value. –