2013-06-28 12 views
8

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?

Odpowiedz

3

Nie można tego zrobić, ponieważ właściwość value jest pod-częścią TextField. Musisz napisać to w swoim kodzie. FXML występuje tylko w aspekcie graficznym. Aby uzyskać więcej informacji na temat FXML:

+6

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

+2

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

+2

@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. –

Powiązane problemy