Java 如何为组件提供多个DropTargetListener?
我刚刚了解到(艰难的方式)JavaJava 如何为组件提供多个DropTargetListener?,java,drag-and-drop,Java,Drag And Drop,我刚刚了解到(艰难的方式)Java组件s只能有一个DropTarget。没问题,我说,我会在DropTarget中添加另一个DropTargetListener——结果发现DropTarget只能有一个DropTargetListener 我有两个DropTargetListeners,它们监听非常不同的事件(一个处理组件内部拖放的事件,另一个处理组件外部的事件)。我必须将它们合并成一个巨大的DropTargetListener,还是有一种优雅的方法将它们分开?如果您没有找到满意的解决方案,您可
组件
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。的确我仍然希望他们能在这个问题上运用更多的智慧——这是一个很大的限制!很难想出一个智能的通用解决方案。我编辑了我的答案,加入了一个“尽力而为”的黑客。