12

javafx には 1 つの選択ボックスがあり、AB と C の 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のイベントを処理する方法を知りたいです

4

3 に答える 3

22

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

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));
      }
    });
于 2013-01-25T14:08:47.350 に答える
12

ただし、セバスチャンは十分に説明しましたが、選択ボックスで選択された実際の値のみに関心があり、インデックスをあまり気にしない場合に備えて、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) );
于 2016-02-09T02:05:48.020 に答える