Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不生成事件的JTree选择_Java_Swing_Selection_Listener_Jtree - Fatal编程技术网

Java 不生成事件的JTree选择

Java 不生成事件的JTree选择,java,swing,selection,listener,jtree,Java,Swing,Selection,Listener,Jtree,我有一个JTree、一个JTable和一个JList,它们显示相同的对象集,但顺序不同,信息也不同。如果从一个组件中选择了一个项目,我希望在其他两个组件上选择相同的对象(这意味着它们应该高亮显示)。当然,我会用监听器监视选择事件。问题是,当一个组件检索所选对象时,我必须通过调用其他组件上的选择方法来确保该对象在其他组件上被选中。这将通知其他两个组件上的选择侦听器。但是,这些事件中的每一个都会依次调用组件上的选择事件,而不是调用自身,从而导致三个组件之间的无限循环 我看到一种解决方案是使用布尔标志

我有一个JTree、一个JTable和一个JList,它们显示相同的对象集,但顺序不同,信息也不同。如果从一个组件中选择了一个项目,我希望在其他两个组件上选择相同的对象(这意味着它们应该高亮显示)。当然,我会用监听器监视选择事件。问题是,当一个组件检索所选对象时,我必须通过调用其他组件上的选择方法来确保该对象在其他组件上被选中。这将通知其他两个组件上的选择侦听器。但是,这些事件中的每一个都会依次调用组件上的选择事件,而不是调用自身,从而导致三个组件之间的无限循环


我看到一种解决方案是使用布尔标志,如果设置了该标志,则使侦听器不传播选择。然而,这似乎笨重而不优雅。有没有一种方法可以简单地告诉JTree、JTable和JList进行选择,但不触发任何事件(与触发事件,然后用布尔标志捕获并停止事件相反)?

看一看。我认为它符合您的要求。

我会使用一个标志指示它是用户更改还是内部更改,但yu也可以在选择调用之前删除侦听器,并在选择调用之后添加它们,以防止事件触发。

我真的不喜欢这种方法。如果有几个听众,我会做更多需要做的工作吗?我不是在找工作。我正在寻找一个合适的设计。是的。非常感谢。这很有效。制作一个同时适用于树、表和列表的模型需要做一些工作,但这似乎比保持布尔值更好。