Ich möchte eine App erstellen, in der einige Ereignisse behandelt werden sollen, als ob sie an übergeordnete Container geliefert würden. Zum Beispiel habe ich eine JPanel, die JLabel enthält. Der obere JPanel implementiert Mausdruck und zieht jetzt. Was muss ich tun, damit die Ereignisse so aussehen, als wären sie in JPanel angekommen, anstatt auf dem Etikett selbst? (Das Ändern des Quellobjekts ist wichtig.)
Gibt es eine bessere Lösung als die Ereignisse tatsächlich zu implementieren und sie im übergeordneten Objekt zu replizieren? (Dies würde nach einigen Objekten mit & gt; 5 Kindern mühsam werden).
Bei Ihrem Ereignis-Listener können Sie das Ereignis an die übergeordnete Komponente senden.
Being myEvent
das Ereignisbehandlungsfunktionsargument:
Aber diese Lösung bedeutet, dass für jedes hinzuzufügende Element ein neuer EventListener erstellt wird.
Sie können also einen einzelnen Event-Handler erstellen und ihn wiederverwenden, indem Sie ihn allen ausgewählten untergeordneten Elementen hinzufügen:
%Vor%Sie sollten das Ereignis konvertieren, bevor Sie es an das übergeordnete Element senden. Die Konvertierung umfasst die Koordinatenübersetzung in Bezug auf den übergeordneten Verwandten.
%Vor%Mausereignisse werden automatisch auf die tiefste Komponente ausgerichtet, die Maus-Listener hat .
Um Ihr Ziel zu erreichen, können Sie einfach alle Maus-Listener auf dem JLabel entfernen und es wird nie als Ziel für Mausereignisse ausgewählt.
Der folgende Code deaktiviert Maus-Listener für die angegebenen Komponenten und ihre untergeordneten Elemente rekursiv:
%Vor%Tags und Links java user-interface swing event-handling