我有一个自定义的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()
答案 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));
}
});