人物クラス:
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
ハウスクラス:
public class House {
private final EventList<Person> residents = new BasicEventList<>();
public void addResident(Person resident) {
residents.add(resident);
}
public EventList<Person> getResidents() {
return residents;
}
}
初期コード:
EventList<House> houses = new BasicEventList<>();
CollectionList<House, Person> allResidents = new CollectionList<>(houses, new CollectionList.Model<House, Person>() {
@Override
public List<Person> getChildren(House parent) {
return parent.getResidents();
}
});
jTable.setModel(GlazedListsSwing.eventTableModel(allResidents, new String[]{"name", "age"}, new String[]{"Name", "Age"}, new boolean[]{false, false}));
House firstHouse = new House();
houses.add(firstHouse);
firstHouse.addResident(new Person("John", 18));
House secondHouse = new House();
houses.add(secondHouse);
secondHouse.addResident(new Person("Mary", 44));
secondHouse.addResident(new Person("Alisa", 6));
そのため、居住者のリストを含む家があります。テーブルには、すべての家のすべての居住者が表示されます。
新しい居住者はいつでも家に追加できるため、テーブルは変更を反映できる必要があります。これがEventList
、居住者を 1 つの家に格納するための当然の選択である理由です。
ただし、GlazedLists では、CollectionList
と レジデントEventList
がすべて同じListEventPublisher
と を使用する必要がありReadWriteLock
ます。
質問
それを考慮して、すべてのインスタンスのListEventPublisher
とのReadWriteLock
両方に同じものを渡すにはどうすればよいでしょうか。CollectionList
EventList
House
- 家の居住者を削除または追加するたびにテーブルを更新する必要がありますか?
House
クラスのインスタンスは、それ自体の作成前と作成後の両方で作成でき、それらはすべて有効なエントリである必要がありますか?CollectionList
2 番目の基準により、からPublisher
andを取得して、それらを new のコンストラクターに渡すことができなくなることに注意してください。(家はリスト自体の前に作成される可能性があるため)Lock
CollectionList
House
とを共有する以外の回避策はPublisher
ありLock
ますか?
関連する質問: GlazedLists の PluggableList の共有パブリッシャーとロックの要件に対処する方法