Wie kann ich eine Komponente mehr als ein Drop Target Listener geben?
-
05-07-2019 - |
Frage
Ich habe gerade erfahren, (auf die harte Art und Weise), dass Java Component
s nur ein DropTarget
haben können. Nicht ins Schwitzen, sagte ich, ich werde nur einen weiteren DropTargetListener
zu diesem DropTarget
hinzufügen - nur um zu entdecken, dass DropTarget
s nur eine DropTargetListener
haben
ich zwei DropTargetListener
s haben, die für ganz unterschiedliche Veranstaltungen hören (ein Griffe Dinge hineingezogen zu werden und innerhalb der Komponente fallen gelassen, die anderen Griffe Dinge von außerhalb der Komponente). Muss ich sie in einem riesigen DropTargetListener
kombinieren, oder gibt es eine elegante Möglichkeit, sie getrennt zu halten?
Lösung
DropTarget
ist eine Unicast-Quelle, so dass Sie höchstens ein DropTargetListener
ihm hinzufügen. Ich glaube, es sollte eine einfache Aufgabe sein, die die Quelle (innen / außen) der Sache fallen gelassen werden und ruft eine Ihrer DropTargetListener
s je nach dem Ergebnis untersucht.
Edit: Wenn Sie versessen sind eine „universelle“ Lösung zum Erstellen, dann versuchen Sie vielleicht ein Wrapper-Ereignis erstellen, die Methode zum ursprünglichen Ereignisse passiert nennt, sondern fängt rejectDrop()
, acceptDrop()
(und vielleicht auch andere Methoden, die Probleme verursachen kann) passieren, dann die Hülle zu Ihren Zuhörern, bis man sich akzeptiert. Dies setzt voraus, dass die Zuhörer „gut“ Ereignisse erkennen und entsprechend handeln.
Andere Tipps
Wenn Sie keine zufriedenstellende Lösung finden, können Sie das Composite-Muster erstellen DropTargetListener
, die eine Liste von Kindern DropTargetListener
s hat. Jedes Mal, wenn eine seiner Methoden genannt werden, wäre es über die Liste der Zuhörer iterieren und die gleiche Methode aufrufen. Das würde erlauben Sie einen einzelnen DropTargetListener
zum Component
zur Hand, aber immer noch mehrere DropTargetListener
s genannt.