java Swing监听器: components listening at each others

标签 java swing events event-handling jlist

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

我应该担心某种“循环”吗?有没有办法知道事件已被消耗?人们如何应对这种情况?

谢谢

最佳答案

正如您所想象的,每次在 listA 上进行选择时,您都会触发 ListSelectionEventlistA 的监听器上触发,它的工作是在 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/

相关文章:

java - 让同一台机器上的客户端运行在不同的线程上

java - 如果用户未输入任何内容,我如何验证整数字段?

Java Swing : managing integers/doubles with Listeners and J*Fields

android - 微调器 OnItemSelected 不起作用

javascript - SVG 上的 JQuery 事件未触发

java - 计算文本文件中的单词数时跳过字符串的前几个单词

java - JSP scriptlet 是反模式吗?

java - 更新 JFrame 中圆的位置

java - 从不同的类调用 JPanel 时遇到问题

c# - 如何处理实现 IDisposable 的类中的委托(delegate)/事件引用