Класс человека:
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
— очевидный выбор для размещения жителей в одном доме.
Однако GlazedLists требует, чтобы CollectionList
и резидентные EventList
использовали одни и те же ListEventPublisher
и ReadWriteLock
.
Вопрос
Как я должен передавать одни и те же ListEventPublisher
и ReadWriteLock
как CollectionList
, так и резидентным EventList
каждого экземпляра House
, учитывая, что
- таблица должна обновляться каждый раз, когда я удаляю или добавляю жителя в дом?
- экземпляры класса
House
могут быть созданы как до, так и после создания самого классаCollectionList
, и они все должны быть допустимыми элементами для него?
Обратите внимание, что второй критерий делает невозможным простое получение Publisher
и Lock
из CollectionList
и передачу их конструкторам новых House
. (поскольку дома могут быть созданы до самого списка)
Возможно, есть другие обходные пути, кроме совместного использования Publisher
и Lock
?
Связанный вопрос: Как справиться с требованием GlazedLists PluggableList для общего издателя и блокировки