当前位置: 首页 > 知识库问答 >
问题:

如何将相同的ListEventPublisher和ReadWriteLock传递到GlazedList中的CollectionList和子事件列表?

梁丘弘
2023-03-14

人物类:

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是将住户存放在一所房子中的一个明显选择。

但是,GlazedList要求CollectionList和常驻EventLists都使用相同的ListentPublisherReadWriteLock

考虑到这一点,我应该如何将相同的listentpublisherReadWriteLock传递给CollectionList和每个House实例的住户EventLists

  • 每次我删除或添加住户时,表都应该更新吗

请注意,第二个标准使得从收藏列表中获取出版商并将其传递给新房屋的建设者是不可能的(因为房屋可能在列表本身之前创建)

除了共享发布者锁定之外,还有其他解决方法吗?

相关问题:如何处理GlazedList对共享发布者和锁的可插拔列表要求

共有1个答案

宿洋
2023-03-14

没有相关文档,但这种方法适用于在列表之间共享listentpublisherReadWriteLock

public static final ListEventPublisher PUBLISHER = ListEventAssembler.createListEventPublisher();
public static final ReadWriteLock LOCK = LockFactory.DEFAULT.createReadWriteLock();

将这些变量放在某个地方,然后将它们传递给新EventLists的每个构造函数

我通过查看GlazedList的源代码发现了这一点,并看到他们以这种方式创建了锁和发布者。不幸的是,我不知道这种方法是否有任何缺点,或者它是否是一种正确的方法

 类似资料:
  • 问题内容: 我有一个在React中创建的组件,该组件可以抽象出我的应用程序中的某些样式。我在两种不同的上下文中使用它- 一种用于提交登录表单,另一种用于导航到注册页面(以及将来可能的其他上下文)。 我试图弄清楚如何将事件处理程序从父组件传递到。我想为登录表单调用一个处理程序,但是为导航按钮调用一个处理程序。这可能吗? 我试过像这样调用组件: 我也尝试过删除arrow函数,这只会导致该函数在加载组件

  • 问题内容: 我有一个使用测试范围的库L v1.0.0的项目A。项目A还依赖于项目B(具有范围编译),而B则可传递地依赖于库L v1.0.0(具有范围编译)。 为什么项目A的库L的最终范围是“测试”?它在运行时导致我NotClassDefFoundError。似乎库L上项目A的依赖项定义覆盖了L上的传递性依赖项。 怎么了 我的项目A仅将L用于单元测试,因此我定义了“测试”范围的依赖项。但是,最后,我

  • 一个子:下拉组件 第二个子:播放列表组件

  • 问题内容: 在我正在从事的新项目中,我开始使用组件而不是指令。 但是,我遇到一个无法找到具体标准方法的问题。 从孩子向父母通知事件很容易,您可以在下面的我的plunkr上找到它,但是从父母向孩子通知事件的正确方法是什么? Angular2似乎通过使用以下方法解决了此问题:https ://angular.io/docs/ts/latest/cookbook/component-communicat

  • 我有一个具有此签名的共享库方法: 我这样称呼它: 但我得到了一个错误: hudson.remoting.ProxyExcture:groovy.lang.MisSingMEDExcture: No签名的方法: dockerBuildWith.call()适用于参数类型:(java.util.LinkedHashMap,java.lang.String,java.lang.String,org.je

  • 本文向大家介绍怎样将事件传递给子组件?相关面试题,主要包含被问及怎样将事件传递给子组件?时的应答技巧和注意事项,需要的朋友参考一下 这道题出的有问题。 一般情况下我们父组件向子组件传递的不是事件,而是事件处理函数