У меня есть приложение JavaFX, в котором есть несколько элементов (один ListView, два ChoiceBox) на основе одного и того же универсального типа.
@FXML private ListView<Department> departmentList;
@FXML private ChoiceBox<Department> employeeAddDepartment;
@FXML private ChoiceBox<Department> employeeEditDepartment;
Я заполняю их все одним обс. список:
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 повторяющихся элемента в списке и в обоих полях выбора. Почему это происходит? Пробовал смотреть обс. список документации, но не нашел ничего связанного, также искал stackoverflow. Я попытался добавить методы equals/hashCode в класс Employee, но похоже, что это не влияет на него.
Еще более странным является тот факт, что иногда эта синхронизация перестает работать. Мол, это работало в прошлый раз, когда вы его запускали, но сегодня вы вообще не видите элементы, добавленные в поля выбора (если вы добавляете элементы только в один из элементов, чтобы предотвратить дублирование). Итак, вы пытаетесь изменить свой код и попытаться добавить элементы в поля выбора, если они не синхронизированы сегодня по какой-либо причине. Затем вы запускаете свое приложение и снова видите 3 повторяющихся элемента. Вы возвращаете свой код, и теперь ваше приложение работает как вчера. Звучит очень странно, но так оно и работает.
Итак, вопрос в том, почему это происходит/не происходит случайным образом и как отключить/включить его, чтобы убедиться, что при следующем запуске он будет работать должным образом?