将 ChangeListener 用于处理字符串的 JavaFX ChoiceBox

Using ChangeListener for JavaFX ChoiceBox working with the String

当使用添加到 ChoiceBox 的 ChangeListener 时,有没有办法直接访问 observableArrayList 中的项目,例如更新 String 类型的实例变量?

我在这里实现了这段代码,这让我可以使用 observableArrayList 的索引值正常工作。但是,我对 Java 还很陌生,所以我只是想知道这是否可行?或者,如果有更好的方法使用 ChangeListener 更新 String Instance 变量。

cb_1.setItems(FXCollections.observableArrayList("High", "Average ", "Low"));
cb_1.getSelectionModel().selectedIndexProperty().addListener(new ChangeListener<Number>() {

    @Override
    public void changed(ObservableValue<? extends Number> observable,
        Number oldVal, Number newVal) {

        System.out.println(observable.getValue());              
    }
});

我遇到了同样的问题。我通过创建一个实现 ChangeListener 的 class 来解决,但是在 class 构造函数

中设置了一个 ChoiceBox final 字段
private class MyChangeListener implements ChangeListener<Number>{
    final ChoiceBox<Number> cb;

    MyChangeListener(ChoiceBox<Number> cb) {
        this.cb = cb;
     }

    @Override
    public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
        System.out.println("cb: "+cb.getId());
    }

}

我后来在代码中使用了它

@FXML   ChoiceBox boxValidPwd;
[..]
boxValidPwd.setItems(FXCollections.observableArrayList(1,2,3,4,5,6));
boxValidPwd.getSelectionModel().selectedIndexProperty().addListener(new MyChangeListener(boxValidPwd));

您应该会在输出中看到所使用的 choiceBox ID。