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

时间:2009-09-09 15:45:57

标签: java drag-and-drop

我刚学会(艰难的)Java Component只能有一个DropTarget。我说,没有汗,我只会向DropTargetListener添加另一个DropTarget - 但却发现DropTarget只能有一个DropTargetListener

我有两个DropTargetListener侦听非常不同的事件(一个处理在组件中拖放的东西,另一个处理来自组件外部的东西)。我必须将它们组合成一个巨大的DropTargetListener,还是有一种优雅的方式将它们分开?

2 个答案:

答案 0 :(得分:2)

如果找不到满意的解决方案,可以使用Composite Pattern创建一个包含子DropTargetListener列表的DropTargetListener。每当调用其中一个方法时,它将遍历其侦听器列表并调用相同的方法。这样,您就可以将DropTargetListener移至Component,但仍然可以调用多个DropTargetListener

答案 1 :(得分:2)

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

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