web-dev-qa-db-ja.com

javafxchoiceboxイベント

javafxに1つの選択ボックスがあり、3つのアイテムが含まれています。このアイテムの選択の変更など、特定のタスクを実行したいので、このイベントをどのように処理できますか?

 final ChoiceBox cmbx=new ChoiceBox();
    try {
        while(rs.next())
         {
            cmbx.getItems().add(rs.getString(2));

          }
         } 
        catch (SQLException e) 
           {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }

データベースからchoiceboxにアイテムを追加しています... javafxでchoiceboxのイベントを処理する方法を知りたいです

10
Jayesh_naik

ChangeListenerをChoiceBoxのselectionmodelとselectedIndexPropertyに追加します。

final ChoiceBox<String> box = new ChoiceBox<String>();

    box.getItems().add("1");
    box.getItems().add("2");
    box.getItems().add("3");

    box.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {
      @Override
      public void changed(ObservableValue<? extends Number> observableValue, Number number, Number number2) {
        System.out.println(box.getItems().get((Integer) number2));
      }
    });
20
Sebastian

ただし、セバスチャンは十分に説明しました。選択ボックスで選択された実際の値のみに関心があり、インデックスをあまり気にしない場合は、selectedIndexPropertyの代わりにselectedItemPropertyを使用できます。

また、ChangeListenerは関数型インターフェースであり、Java 8.を使用すると、ここでラムダを使用できます。Sebastianの例を少し変更しました。newValueは新しく選択された値です。

ChoiceBox<String> box = new ChoiceBox<String>();
box.getItems().add("1");
box.getItems().add("2");
box.getItems().add("3");

box.getSelectionModel()
    .selectedItemProperty()
    .addListener( (ObservableValue<? extends String> observable, String oldValue, String newValue) -> System.out.println(newValue) );
12
Steve Park