人员类:
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
之后 所有> strong>必须是有效的条目吗?请注意,第二个标准使得无法从Publisher
获取Lock
和CollectionList
并将其传递给新House
的构造函数。 (因为房屋可能在列表本身之前创建)
是否可能有其他解决方法而非共享Publisher
和Lock
?
相关问题: How to deal with GlazedLists's PluggableList requirement for shared publisher and lock
答案 0 :(得分:0)
没有关于它的文档,但此方法适用于在列表之间共享ListEventPublisher
和ReadWriteLock
:
public static final ListEventPublisher PUBLISHER = ListEventAssembler.createListEventPublisher();
public static final ReadWriteLock LOCK = LockFactory.DEFAULT.createReadWriteLock();
将这些变量放在某处,然后将它们传递给新EventList
s
我通过查看GlazedLists的源代码找到了这一点,并看到他们以这种方式创建锁和发布者。不幸的是,我不知道这种方法是否有任何缺点,或者它是否是一种正确的方法。