我有一个使用ChoiceBox的javafx项目。我试图在ChoiceBox的项目对象的状态发生变化时更新ChoiceBox。
我几乎让它工作但一个问题仍然存在。当项目状态发生变化时,选项框会显示更新的项目,但它也会显示上一项目的状态。所以我最终得到了两个可用于单个项目的选项。
当我重新启动程序时,仅显示更新的选择。此外,当我将选项框的项目打印到控制台时,仅显示更新项目。
我的代码片段到目前为止:
public class User {
private ObjectProperty<Name> name;
User(Name name) {
this.name = new SimpleObjectProperty<>(name);
}
public Name getName() {
return name.get();
}
public ObjectProperty<Name> nameProperty() {
return name;
}
@Override
public String toString() {
return name.toString();
}
void setName(Name aName) {
this.name.set(aName);
}
}
Callback<User, Observable[]> extractor = (User u) -> {
return new Observable[]{u.nameProperty()};
};
users = FXCollections.observableArrayList(extractor);
然后我将对用户列表的不可修改版本的引用传递给UI包,然后在选择框中使用它。
public ObservableList<User> getUsers() {
return FXCollections.unmodifiableObservableList(users);
}
private ChoiceBox<User> climberChoiceBox;
climberChoiceBox.setConverter(new StringConverter<User>() {
@Override
public String toString(User aUser) {
return aUser == null ? null : aUser.getName().toString();
}
@Override
public User fromString(String string) {
return null;
}
});
climberChoiceBox.setItems(model.getUsers());
任何想法如何解决这个问题。 感谢。