如何监听对javafx选择框所做的更改

时间:2017-05-15 13:51:15

标签: java javafx

我有一个自定义的ChoiceBox,我会像这样动态填充:

public class CustomChoiceBox {
    public void addItems(List<Item> items) {
        // Populate choicebox
        for(Item item : items) {
            CustomOption choice = new CustomOption(String.valueOf(item.getId()), item);
            this.getItems().add(choice);
        }
   }
}

CustomOption是一个定义如下的自定义类:

public class CustomOption extends Observable{
    private String key;
    private Object value;

    public CustomOption(String key, Object value) {
        this.key = key;
        this.value = value;
   }
}

我希望能够在用户做出不同选择时收听,并获得该选择的价值。 所以我添加了一个听众:

myChoiceBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<CustomOption>() {
@Override
public void changed(ObservableValue<? extends CustomOption> observable,
    CustomOption oldValue, CustomOption newValue) {

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

但是,当我更改选项时,此代码未运行。 我也尝试过使用myChoiceBox.valueProperty()

1 个答案:

答案 0 :(得分:-1)

您可以尝试使用indexProperty而不是选择

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

names.getItems().add("john");
names.getItems().add("alex");
names.getItems().add("smith");

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