2017-02-22 3 views
1

こんにちは私は、スピナーのすべてのキーをリフレッシュしたいと思います。 私はこの次のコードを持っている:changevalue listener spinner javafx

spinner.valueProperty().addListener((obs, oldValue, newValue) -> { 
     if (!"".equals(newValue)) { 
      System.out.println("spiinerrrr"); 
     } 
    }); 

をOK、私はスピナーの矢印でクリックしたときに、このコードは良いですが、私はスピナーの入力欄にクリックしたときに、私は番号を書き、

System.out.println("spiinerrrr"); 

は実行されません。

なぜですか?

textfield.textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> { 
     if (!"".equals(newValue)) { 
      System.out.println("textfield"); 
     } 
    }); 
+0

したがって、スピナー値が変更されるたびに、「ラベル」のテキストを更新しますか? – DVarga

+0

実際、 'System.out.println(" spinner ")を置き換えるために、私は' myLabel.setText(newValue) 'を持っていますが、私がスピンナーに書き込んだときに、スピナーの矢。 – Benj

答えて

1

あなたはSpinnertextPropertyにリスナーを追加することができます:

を私はテキストフィールドに書くときTextFieldに次のコードは良好である間、私は、コンポーネントスピナーのための変化値リスナーを見つけることができません。
spinner.getEditor().textProperty().addListener((obs, oldValue, newValue) -> { 
     if (!"".equals(newValue)) { 
      System.out.println("spiinerrrr"); 
     } 
    }); 

それ以外の場合は、valuePropertyが更新される前にEnterキーを押す必要があります。焦点は(Enterキーを押ししなくても)失われたときにもvaluePropertyを更新したい場合は

focusedPropertyに追加のリスナーを追加します。

spinner.focusedProperty().addListener((obs, oldValue, newValue) -> { 
     if (newValue == false) { 
      this.increment(0); 
     } 
    }); 
+0

ありがとう、それはまさにそれです! – Benj

0

使用getEditor()方法をスピンナーのTextFieldとにアクセスするために追加するリスナー:

Spinner<String> sp = new Spinner<>(FXCollections.observableArrayList("aaa", "bbb", "ccc")); 
sp.setEditable(true); 
sp.getEditor().textProperty().addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> { 
    System.out.println(newValue); 
}); 

あなたが知る必要がある場合、ユーザーは、新しい値を入力する場合:

sp.getEditor().setOnAction(e -> { 
    System.out.println(sp.getEditor().getText()); 
}); 
0

valuePropertyが変更されていないため、コードは実行されません。

を入力してと入力すると、エディタ内でテキストが適用され、valuePropertyが変更されます。 doc of editablePropertyから

編集可能なプロパティは、ユーザ入力がスピナーエディタに入力すること にできるかどうかを指定するために使用されます。 editableがtrueの場合、ユーザーが入力してEnterキーを押すと、ユーザー入力は になります。この ポイントで、入力はSpinnerValueFactoryコンバータ StringConverter.fromString(String)メソッドに渡されます。 からの戻り値(タイプTの)は、 SpinnerValueFactory.setValue(Object)メソッドに送信されます。値が有効な場合は、 が値のままになります。無効な場合、工場の価値は に応じて対応し、この変更を取り消す必要があります。

あなたはそのエディタでテキストの変化にすぐに反応するSpinnerが必要な場合は、このように何とかそれを行うことができます。

Spinner<Integer> spinner = new Spinner<>(0, 500, 0); 
spinner.setEditable(true); 
spinner.getEditor().textProperty().addListener((obs, oldval, newval) -> { 

    SpinnerValueFactory<Integer> valueFactory = spinner.getValueFactory(); 
    if (valueFactory != null) { 
     StringConverter<Integer> converter = valueFactory.getConverter(); 
     if (converter != null) { 
      try { 
       Integer value = converter.fromString(newval); 
       if (value != null) 
        valueFactory.setValue(value); 
       else 
        valueFactory.setValue(0); 
      } catch (NumberFormatException ex) { 
       spinner.getEditor().setText(converter.toString(valueFactory.getValue())); 
      } 
     } 
    } 
}); 

注:ニーズを完全に使用する一致バインディング:

label.textProperty().bind(spinner.valueProperty().asString());