我想编写两个JList(类别和项目)。当我点击一个类别时,它应该选择该类别的所有项目,当我点击一个项目时,它应该选择其类别。因此,JList两个ListSelectionListener会互相监听并更改选择。
我是否应该担心某种“循环”?有没有办法告诉事件已被消耗?人们如何处理这种情况?
由于
答案 0 :(得分:1)
正如您所想象的那样,每次在listA
上进行选择时,您都会触发ListSelectionEvent
向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 - 使用两个侦听器,但是,为了避免循环,您需要在尝试选择项之前测试该项是否已被选中。如果已经选中,请不要重新选择它。
答案 1 :(得分:0)
查看Beans Binding API。这是NetBeans的tutorial。
答案 2 :(得分:0)
两个听众是如何做到这一点的好方法,不要担心。确保只创建ONCE,而不是循环。
答案 3 :(得分:-1)
检查您的焦点在哪里。如果您的侦听器侦听组件A并且焦点不在A上,请不要更新其他组件,因为A不是用户更改的组件。