在项目状态发生变化时更新javafx ChoiceBox

时间:2016-01-02 19:57:51

标签: java javafx javafx-8

我有一个使用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());

任何想法如何解决这个问题。 感谢。

0 个答案:

没有答案