我刚学会(艰难的)Java Component
只能有一个DropTarget
。我说,没有汗,我只会向DropTargetListener
添加另一个DropTarget
- 但却发现DropTarget
只能有一个DropTargetListener
!
我有两个DropTargetListener
侦听非常不同的事件(一个处理在组件中拖放的东西,另一个处理来自组件外部的东西)。我必须将它们组合成一个巨大的DropTargetListener
,还是有一种优雅的方式将它们分开?
答案 0 :(得分:2)
如果找不到满意的解决方案,可以使用Composite Pattern创建一个包含子DropTargetListener
列表的DropTargetListener
。每当调用其中一个方法时,它将遍历其侦听器列表并调用相同的方法。这样,您就可以将DropTargetListener
移至Component
,但仍然可以调用多个DropTargetListener
。
答案 1 :(得分:2)
DropTarget
是单播来源,因此您最多可以添加一个DropTargetListener
。我相信它应该是一个简单的对象,它检查被删除的东西的源(内部/外部),并根据结果调用DropTargetListener
之一。
编辑:如果您一心想要创建“通用”解决方案,那么您可以尝试创建一个将方法调用传递给原始事件的包装器事件,但拦截rejectDrop()
,acceptDrop()
(和也许其他方法可能会导致麻烦),然后将包装器传递给您的侦听器,直到接受它为止。这假定听众识别“好”事件并采取相应行动。