3

我想编写两个 JList(类别和项目)。当我单击一个类别时,它应该选择该类别的所有项目,当我单击一个项目时,它应该选择其类别。所以两个JList都会有一个ListSelectionListener互相监听并改变选择。

我应该担心某种“循环”吗?有没有办法告诉 Event 已被消费?人们如何处理这种情况?

谢谢

4

4 回答 4

1

正如您所想象的,每次在 上进行选择时listA,您都会ListSelectionEvent在您的侦听器上触发 a listA,其工作是在其中找到所有合适的项目以listB进行选择。然后强制选择listB将触发由您的listB侦听器处理的事件。这将反过来强制选择listA。简单地使用两个监听器并不能解决问题。

我看到两个选项:

1 - 使用单个侦听器。此侦听器将需要getSource使用ListSelectionEvent. 如果源是listB,请从 的侦听器列表中删除您的侦听器listA,强制选择listA然后读取。

list1.removeListSelectionListener(this);
list1.setSelectedIndex(e.getFirstIndex()); //this would have to be played with to allow for intervals
list1.addListSelectionListener(this);`

2 - 使用两个侦听器,但是,为了避免循环,您需要在尝试选择之前测试该项目是否已被选中。如果它已经被选中,不要重新选择它。

于 2010-04-24T16:22:46.857 回答
0

查看Beans 绑定 API。这是 NetBeans 的教程

于 2010-04-24T15:44:44.057 回答
0

两个听众是很好的方法,不用担心。只要确保您只创建一次侦听器,而不是循环创建侦听器。

于 2010-04-24T15:48:44.210 回答
-1

检查你的焦点在哪里。如果你的监听器监听组件 A 并且焦点不在 A 上,请不要更新其他组件,因为 A 不是用户更改的组件。

于 2012-11-27T14:41:48.243 回答