我想编写两个 JList(类别和项目)。当我单击一个类别时,它应该选择该类别的所有项目,当我单击一个项目时,它应该选择其类别。所以两者JList将有一个 ListSelectionListener互相倾听并改变选择。
我应该担心某种“循环”吗?有没有办法知道事件已被消耗?人们如何应对这种情况?
谢谢
最佳答案
正如您所想象的,每次在 listA
上进行选择时,您都会触发 ListSelectionEvent
在 listA
的监听器上触发,它的工作是在 listB
中找到所有合适的项目来选择。然后在 listB
上强制选择将触发 listB
监听器处理的事件。这将反过来强制选择 listA
。仅仅使用两个监听器并不能解决问题。
我看到两个选项:
1 - 使用单个监听器。此监听器需要使用 ListSelectionEvent
上的 getSource
方法来测试事件源。如果源是 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 - 使用两个监听器,但是为了避免循环,您需要在尝试选择该项目之前测试该项目是否已被选择。如果已经选择,请勿重新选择。
关于java Swing监听器: components listening at each others,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2705040/