Überlappende Objekte im JLayeredPane ermitteln
-
Hallo zusammen,
ich füge einem JLayeredPane mehrere Objekte hinzu, die von JComponent abgeleitet sind. Ich wollte, dass sich die Objekte überlappen, daher JLayeredPane. Wenn ich dann das MouseEvents abfangen will, komme ich auf auf die unter einem Objekt (nämlich dem obersten Objekt) liegenden Objekte überhaupt nicht ran. Existiert eine Methode, mit der sich alle mit einem Objekt überscheidenden Objekte ermittlen lassen - sowas wie
this.getOverlappingJComponents()
? Ich habe die Klasse JComponent etc. schon durchsucht - jedoch nichts nützliches gefunden. Ich habe zwar eine elegante Lösung gefunden, die ist jedoch von Performance her nicht akzeptable. Ich habe die Überwachung beim Parentobjekt (JLayeredPane) registriert (parent.addMouseMotionListener(this)). Allerdings dauert es bei mehreren hunderten (oder tausenden) Objekten (mein Fall) eine Ewigkeit dauert und es flattert.
So schaut der Konstruktor der auf dem JLayeredPane platzierten JComponenten aus:
//abgeleitet von JComponent public MyJComponent(Rectangle rect, JComponent parent) { setOpaque(false); setBounds(rect); this.addMouseMotionListener(this); /*früher: parent.addMouseMotionListener(this);*/ }
Dann möchte ich bei MouseMove auch die eventuell drunterliegenden MyJComponents ermitteln:
public void mouseMoved(MouseEvent me) { if(getBounds().contains(me.getPoint())) { tueWas(); } else { /* ALLE ÜBERLAPPENDEN OBJEKTE DURCHLAUFEN !!!! for(...) { } */ }
Danke im Voraus für Vorschläge
Kati