【发布时间】:2016-04-13 09:41:31
【问题描述】:
我有一个 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)时
departmentList.getItems().add(dep);
,它也会自动添加到选择框中,并且您会在列表视图和两个选择框中获得 3 个重复项。 为什么会这样?我试着看obs。列出文档,但没有找到任何相关内容,还搜索了stackoverflow。我尝试在 Employee 类中添加 equals/hashCode 方法,但看起来并不影响它。
更奇怪的是,有时同步会停止工作。就像,它在您上次启动它时工作,但今天您根本看不到添加到选择框中的项目(如果您仅将元素添加到元素之一以防止重复)。 因此,您尝试修改您的代码并尝试将元素添加到选择框,如果它们由于某种原因今天没有同步。 接下来,您启动应用程序并再次看到 3 个重复项。您还原了代码,现在您的应用程序就像昨天一样工作。 这听起来很奇怪,但它是这样工作的。
那么,问题是为什么会随机发生/不会随机发生,以及如何禁用/启用它以确保它在下次启动时会按预期工作?
【问题讨论】:
-
你只有一个列表。您添加到其中的任何内容都会影响所有三个变量,因为它们都引用同一个对象。
-
是的,但是看前一段,它停止工作了。为什么?
-
除非您提供足够的代码来重现它(即minimal reproducible example),否则没有人可以回答该部分(零星部分)。该行为不是由您发布的代码引起的。
-
是的,看起来像一个非常个别的案例,因为它有效,而且现在没有任何代码更改...
标签: java list javafx observablelist