Como posso dar um componente mais do que um DropTargetListener?
-
05-07-2019 - |
Pergunta
Eu só aprendi (a maneira dura) que Component
s Java só pode ter um DropTarget
. Sem suor, eu disse, eu vou adicionar outro DropTargetListener
para que DropTarget
- apenas para descobrir que DropTarget
s só pode ter um DropTargetListener
Eu tenho dois DropTargetListener
s que escutam para eventos muito diferentes (um lida coisas que estão sendo arrastados e soltos dentro do componente, as outras alças coisas de fora do componente). Devo combiná-los em um DropTargetListener
gigante, ou há uma maneira elegante de mantê-los separados?
Solução
DropTarget
é uma fonte unicast, para que você pode adicionar no máximo um DropTargetListener
a ele. Eu acredito que deve ser um objeto simples que analisa a fonte (dentro / fora) da coisa que está sendo deixado cair e chama um dos seus DropTargetListener
s dependendo do resultado.
Edit: Se você é o inferno dobrado em criar uma solução "universal", então você pode tentar criar um evento de invólucro que passa chamadas de método para o evento original, mas intercepta rejectDrop()
, acceptDrop()
(e talvez outros métodos que podem causar problemas) , em seguida, passar o wrapper para seus ouvintes, até que um aceita. Isso pressupõe que os ouvintes reconhecem "boas" eventos e agir em conformidade.
Outras dicas
Se você não encontrar uma solução satisfatória, você poderia usar o Composite Pattern para criar um DropTargetListener
que tem uma lista de DropTargetListener
s criança. Sempre que um de seus métodos são chamados, seria iterar sobre a sua lista de ouvintes e invocar o mesmo método. Isso permitiria que você a entregar uma única DropTargetListener
ao Component
mas ainda tem vários DropTargetListener
s chamado.