Dies ist eine alte Version des Dokuments!


Java - AWT/Swing

Glasspane, Probleme mit Maus/Cursor umgehen

Ein Beispiel für die Verwendung einer Glasspane findet sich hier.
An dieser Stelle geht es um das Problem, dass bei Verwendung einer Glasspane verschiedene Problem auftreten. So funktionieren beispielsweise Mauscusor-Änderungen nicht. Um dies zu vermneiden hilft ein einfacher Trick. Die Glasspane muss einfach die Methode contains(intx, int y) so überschreiben, dass sie immer false zurück liefert:

@Override boolean contains(int x, int y) {
   return false;
}


Leider bleibt ein Nachteil. Auf der Glasspane liegende Componenten (z.B. ein Button) funktionieren nun nicht mehr. Aber auch dafür gibt es eine Lösung.



Hier das Beispiel einer Glasspane, bei welcher die Maus- und Cursor-Probleme behoben sind, aber auf ihr liegende Componenten (hier JButton) trotzdem funktionieren:

public class GlassPane extends JPanel {
   public GlassPane() {
      setOpaque(false);
   }
 
   @Override
   public boolean contains(int x, int y) {
      for (Component comp : getComponents()) {
         if (comp instanceof JButton) {
            Point location = comp.getLocation();
            int xTmp = x - location.x;
            int yTmp = y - location.y;
            return comp.contains(xTmp, yTmp);
         }
      }
      return false;
   }
}

Eigene Werkzeuge
Werkzeuge

gratis Counter by GOWEB
seit 9.10.2007