java Swing Listeners:彼此聆听的组件

时间:2010-04-24 15:40:03

标签: java swing events event-handling jlist

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

我是否应该担心某种“循环”?有没有办法告诉事件已被消耗?人们如何处理这种情况?

由于

4 个答案:

答案 0 :(得分:1)

正如您所想象的那样,每次在listA上进行选择时,您都会触发ListSelectionEventlistA的听众触发,其职责是找到所有合适的项目在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不是用户更改的组件。