0

我有一个 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 个重复项。您还原了代码,现在您的应用程序就像昨天一样工作。这听起来很奇怪,但它是这样工作的。

所以,问题是为什么这种情况会随机发生/不会发生,以及如何禁用/启用它以确保它在下次启动时能按预期工作?

4

1 回答 1

0

发生这种情况是因为 3 个组件共享相同的列表。像这样创建它:

List<Department> ds = db.getDepartmentList();
departmentList.getItems().addAll(ds);
employeeAddDepartment.getItems().addAll(ds);
employeeEditDepartment.getItems().addAll(ds);
于 2016-01-08T16:30:26.880 回答