2013-06-28 14 views
8

私は、JavaFXアプリケーションをJavaコードのコントロールの宣言/設定からレイアウトをFXML設定に分割することに変わっています。私が持っている問題は、コードのChangeListenerに同等の属性(?)を見つけることができないということです。元のJavaコードでChangeListenerに相当するFXML属性?

、私はFXMLを使用して取得することができ、最も近いについて

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()); 
     } 
    } 

を持っている:onKeyPressedを使用しての問題点は、ピックアップに貼り付けられていないということです

<TextField id="outputNameTextField" onKeyPressed="#textBoxOnChange" promptText="Path of merge file" GridPane.columnIndex="1" GridPane.rowIndex="3" GridPane.columnSpan="2" GridPane.rowSpan="1" /> 

ChangeListenerのような値があります。 FXMLに変更リスナーを追加するにはどうすればいいですか?

答えて

3

valueプロパティはTextFieldの下位部分であるため、これを行うことはできません。だからあなたはあなたのコードにそれを書かなければなりません。 FXMLは、グラフィカルな側面のみに対応しています。 FXMLの詳細については :

+6

私は私がFXMLでonChangeイベントをonKeyPressedイベントを追加することはできませんが、理由としてだけで混乱していると思います。私は両方を行うことができなければならないか、どちらも行うことができないように思われる。 – Todd

+2

これは、変更リスナーが関数ではなく、プロパティのリスナーであるためです。それはJava FXの考え方です。 – PhilippeGeek

+2

@PhilippeGeek JavaFXの問題は、その多様性です。 FXMLのonActionを使用してCheckBoxのイベントを変更することができます(ただし、onActionもプロパティです)。しかし、SpinnersやTextAreasなど、他の多くの人と同じことをすることはできません。私は値を運ぶすべてのコンポーネントのための共通のスーパータイプ "フィールド"が存在することを望みます。このスーパータイプにはsetOnValueChangeメソッドとvalueプロパティが必要です。 –

関連する問題