Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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 如何为组件提供多个DropTargetListener?_Java_Drag And Drop - Fatal编程技术网

Java 如何为组件提供多个DropTargetListener?

Java 如何为组件提供多个DropTargetListener?,java,drag-and-drop,Java,Drag And Drop,我刚刚了解到(艰难的方式)Java组件s只能有一个DropTarget。没问题,我说,我会在DropTarget中添加另一个DropTargetListener——结果发现DropTarget只能有一个DropTargetListener 我有两个DropTargetListeners,它们监听非常不同的事件(一个处理组件内部拖放的事件,另一个处理组件外部的事件)。我必须将它们合并成一个巨大的DropTargetListener,还是有一种优雅的方法将它们分开?如果您没有找到满意的解决方案,您可

我刚刚了解到(艰难的方式)Java
组件
s只能有一个
DropTarget
。没问题,我说,我会在
DropTarget
中添加另一个
DropTargetListener
——结果发现
DropTarget
只能有一个
DropTargetListener


我有两个
DropTargetListener
s,它们监听非常不同的事件(一个处理组件内部拖放的事件,另一个处理组件外部的事件)。我必须将它们合并成一个巨大的
DropTargetListener
,还是有一种优雅的方法将它们分开?

如果您没有找到满意的解决方案,您可以使用创建一个
DropTargetListener
,其中包含子
DropTargetListener
列表。无论何时调用它的一个方法,它都会遍历它的侦听器列表并调用相同的方法。这将允许您将一个
DropTargetListener
交给
组件
,但仍会调用多个
DropTargetListener

如果您没有找到满意的解决方案,可以使用创建一个
DropTargetListener
,其中包含子
DropTargetListener
的列表。无论何时调用它的一个方法,它都会遍历它的侦听器列表并调用相同的方法。这将允许您将一个
DropTargetListener
交给
组件
,但仍会调用多个
DropTargetListener

DropTarget
是单播源,因此您最多可以向其添加一个
DropTargetListener
。我相信它应该是一个简单的对象,它检查被删除对象的源(内部/外部),并根据结果调用其中一个
DropTargetListener
s


编辑:如果您下定决心要创建一个“通用”解决方案,那么您可以尝试创建一个包装器事件,该事件将方法调用传递给原始事件,但会拦截
rejectDrop()
acceptDrop()
(以及可能导致麻烦的其他方法),然后将包装器传递给侦听器,直到有人接受它。这假设侦听器识别“良好”事件并相应地采取行动。

DropTarget
是单播源,因此您最多可以向其添加一个
DropTargetListener
。我相信它应该是一个简单的对象,它检查被删除对象的源(内部/外部),并根据结果调用其中一个
DropTargetListener
s


编辑:如果您下定决心要创建一个“通用”解决方案,那么您可以尝试创建一个包装器事件,该事件将方法调用传递给原始事件,但会拦截
rejectDrop()
acceptDrop()
(以及可能导致麻烦的其他方法),然后将包装器传递给侦听器,直到有人接受它。这假设听众识别“好”事件并相应地采取行动。

这正是我所寻找的优雅解决方案。非常感谢。哎呀,这根本没用。如果第一个DropTargetListener拒绝拖动事件,它将无法通过其他侦听器。我试图通过复制拖动事件并将不同的副本传递给每个侦听器来解决这个问题,但这会导致它自己的问题,比如侦听器在不应该的时候接收drop事件,等等。也许这就是Java不允许每个组件有多个drop侦听器的原因。LOL。的确我仍然希望他们能在这个问题上运用更多的智慧——这是一个很大的限制!很难想出一个智能的通用解决方案。我编辑了我的答案,加入了一个“尽力而为”的破解。这正是我一直在寻找的优雅解决方案。非常感谢。哎呀,这根本没用。如果第一个DropTargetListener拒绝拖动事件,它将无法通过其他侦听器。我试图通过复制拖动事件并将不同的副本传递给每个侦听器来解决这个问题,但这会导致它自己的问题,比如侦听器在不应该的时候接收drop事件,等等。也许这就是Java不允许每个组件有多个drop侦听器的原因。LOL。的确我仍然希望他们能在这个问题上运用更多的智慧——这是一个很大的限制!很难想出一个智能的通用解决方案。我编辑了我的答案,加入了一个“尽力而为”的黑客。