我有一个 JavaFX 应用程序,它有几个基于相同泛型类型的元素(一个 ListView,两个 ChoiceBox'es)。
@FXML private ListView<Department> departmentList;
@FXML private ChoiceBox<Department> employeeAddDepartment;
@FXML private ChoiceBox<Department> employeeEditDepartment;
我用一个obs填满它们。列表:
List<Department> ds = db.getDepartmentList();
ObservableList<Department> ds1 = FXCollections.observableArrayList(ds);
departmentList.setItems(ds1);
employeeAddDepartment.setItems(ds1);
employeeEditDepartment.setItems(ds1);
问题是,当您将一个元素添加到一个元素(例如部门列表)时
departmentList.getItems().add(dep);
,它也会自动添加到选择框中,并且您会在列表视图和两个选择框中获得 3 个重复的项目。为什么会这样?我试着看obs。列出文档,但没有找到任何相关内容,还搜索了stackoverflow。我尝试将 equals/hashCode 方法添加到 Employee 类,但看起来它不会影响它。
更奇怪的是,有时同步会停止工作。就像,它在您上次启动它时工作,但今天您根本看不到添加到选择框中的项目(如果您仅将元素添加到元素之一以防止重复)。因此,您尝试修改您的代码并尝试将元素添加到选择框,如果它们由于某种原因今天没有同步。接下来,您启动应用程序并再次看到 3 个重复项。您还原了代码,现在您的应用程序就像昨天一样工作。这听起来很奇怪,但它是这样工作的。
所以,问题是为什么这种情况会随机发生/不会发生,以及如何禁用/启用它以确保它在下次启动时能按预期工作?