# Alle Events abfangen mit GlassPane



## kale1990 (16. Mrz 2009)

hallo,

ich erstelle ein glasspane mit folgendem code:

[HIGHLIGHT="Java"]glassPane = new JPanel() {
    protected void paintComponent(Graphics g) {     
        setOpaque(false);                       
        super.paintComponent(g);
        g.setColor(new Color(64, 64, 128, 64));
        g.fillRect(0, 0, 100, 100);
        setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    }
};[/HIGHLIGHT]
falls diese glasspane aktiv( -> setVisible(true) ) ist soll es nun alle tastatur- und mausevents abfangen.

hab scho versucht dem glasspane listener hinzuzufügen was aber irgendwie nichts brachte.
obwohl das glasspane aktiv ist, werden die events, nachdem das glasspane wieder deaktiviert wurde an das jframe übergeben.
wie mache ich es am besten das er falls das glasspane aktiv ist alle maus- und tastaturevents ignoriert?


----------



## Verjigorm (16. Mrz 2009)

wie wärs mit

```
JPanel glassPane = frame.getGlassPane()
```
Ansonsten hast du ja nur ein ganz normales JPanel ...


----------



## Quaxli (16. Mrz 2009)

Sag uns doch mal, was Du grundsätzlich beabsichtigst.


----------



## nocxsville (16. Mrz 2009)

Die mouse events indem du einen MouseListener an die glass pane hängst:

```
glassPane.addMouseListener(new MouseListener() {
			public void mouseClicked(MouseEvent me) {}
			public void mouseEntered(MouseEvent me) {}
			public void mouseExited(MouseEvent me) {}
			public void mousePressed(MouseEvent me) {}
			public void mouseReleased(MouseEvent me) {}
});
```

Solange die glass pane sichtbar ist (visible == true) fängt sie alle mouse events ab. Mit Tastatureingaben verhält sich das denke ich mal genauso.

Gruß
nocxsville


----------



## kale1990 (16. Mrz 2009)

ich weiß nicht warum, aber so wie nocxsvile es vorschlägt hab ich es versucht aber es funktioniert leider nicht?!

@Verjigorm: glassPane wird natürlich dann dem frame zugewiesen ( frame.setGlassPane(glassPane); )


----------



## nocxsville (16. Mrz 2009)

Merkwürdig, bei mir funktioniert es so. Schau mal an welcher Stelle du den mouse listener setzt, vielleicht ist diese an Bedingungen geknüpft und wird gar nicht ausgeführt.

Mal was anderes. Es reicht, wenn man den cursor im Konstruktor der glass pane setzt. Wenn du den cursor (wie in deinem Beispiel) in paintComponent(...) setzt führt das zu unnötigen Methodenaufrufen. Das gleiche gilt für setOpaque(false).


----------



## kale1990 (18. Mrz 2009)

Hallo nochmal,

der glassPane wird im aktiviert wenn etwas geklickt wird, also im EDT.  damit das aktivierte glassPane auch angezeigt wird, wird das zu verarbeitende event mit SwingUtilities.invokeLater(run) gestartet.

Wenn ich das 
	
	
	
	





```
SwingUtilities.invokeLater(run)
```
 nun durch 
	
	
	
	





```
Thread th = new Thread(run);
th.start();
```
 ersetze und somit das event auserhalb des EDT verarbeite, kann ich die maus und tastatureingaben mit dem glassPane auch abfangen, warum ist das so?


----------



## Ebenius (18. Mrz 2009)

Mach doch einfach mal ein kleines vollständiges Beispiel, das Dein Problem so knapp wie möglich beinhaltet! Dann kann man sich das auch im Kontext ansehen und ausprobieren.

Ebenius


----------

