0

同じジェネリック型に基づく要素がほとんどない (1 つの ListView、2 つの ChoiceBox) JavaFX アプリケーションがあります。

@FXML private ListView<Department> departmentList;
@FXML private ChoiceBox<Department> employeeAddDepartment;
@FXML private ChoiceBox<Department> employeeEditDepartment;

それらすべてを 1 つの obs で埋めます。リスト:

List<Department> ds = db.getDepartmentList();
ObservableList<Department> ds1 = FXCollections.observableArrayList(ds);
departmentList.setItems(ds1);
employeeAddDepartment.setItems(ds1);
employeeEditDepartment.setItems(ds1);

問題は、要素を 1 つの要素 (たとえば、departmentList) に追加するときです。

departmentList.getItems().add(dep);

、選択ボックスにも自動的に追加され、リストビューと両方の選択ボックスに3つの重複したアイテムが表示されます。なぜそれが起こるのですか?オブス見てみました。ドキュメントをリストしますが、関連するものは何も見つかりませんでした。stackoverflowも検索しました。Employee クラスに equals/hashCode メソッドを追加しようとしましたが、影響がないようです。

さらに奇妙なのは、その同期が機能しなくなることがあるという事実です。同様に、前回起動したときは機能しましたが、今日では、選択ボックスに項目がまったく追加されていません (重複を防ぐために要素の 1 つにのみ要素を追加した場合)。したがって、何らかの理由で今日同期されていない場合は、コードを変更して、要素を選択ボックスに追加しようとします。次に、アプリケーションを起動すると、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 に答える