GlassPane deaktiviert MouseKlicks nicht

Foermchen82

Top Contributor
Hallo zusammen,

ich habe mir eine Glasspane erstellt:

Java:
public LoadingGlassPane(){
		init();
	}
	
	private void init(){
		MouseListener listener = new MouseAdapter() {
		};
		
		addMouseListener(listener);
        
        setLayout(new BorderLayout());
        setOpaque(false);
        add(new JLabel("Loading", JLabel.CENTER), BorderLayout.CENTER);
	}

in meinem Frame habe ich sie binde ich sie folgendermaßen ein:

[Java]
loadingGlassPane.setVisible(true);
SwingUtilities.invokeLater(new Runnable() {

@Override
public void run() {

...Aktion ausführen und Daten neu laden...
loadingGlassPane.setVisible(false);
}
});
[/code]

das Problem dabei ist, dass zwar währen des Ladens auf Klicks nicht reagiert wird, jedoch werden die Klicks Quasi "nachgeholt". D.h. alles was ich während des Ladens klicke wird nach dem Laden ausgeführt.

Wie kann ich das verhindern???

danke im voraus
 
Nein eben nicht 😉 sie werden in die EDT - Queue reingetan...
Brauchst wahrscheinlich ein SwingWorker

Hier noch ne schöne Alternativer zu einer Glasspane, damit man die Aktion dem User auch schön anzeigen kann...
https://jxlayer.dev.java.net/
 
Zuletzt bearbeitet von einem Moderator:
Nein, damit wird es ebgen genau auf dem EDT ausgeführt. Das verwendet man, wenn man von anderen Threads aus etwas auf dem EDT machen will.

Kannst auch mal nach "SwingWorker" suchen, der bietet dazu schon einiges: Der hat eine abstrakte Methode "doInBackground", die in einem eigenen Thread läuft, und eine Methode "done", die (wenn der Background-Task fertig ist) auf dem EDT ausgeführt wird, und die man überschreiben kann, so dass dann z.B. die GlassPane wieder unsichtbar gemacht wird...

EDIT: Zu langsam... naja.... wayne interessierts 😀
 
ok, also wenn ich direkt einen Thread nehme klappst.

Kann mir jetzt mal bitte einer den unterschied erklären bei der Verwendung von: Threads, SwingUtils und SwingWorker

Danke!!
 
EDIT: Zu langsam... naja.... wayne interessierts 😀

😛 😀...

Es gibt den EDT in diesem wird gezeichnet... Mit SwingUtilities#invokeLater wird dein Runnable in eine EDT - Queue reingelegt. Diese Queue arbeitet die Runnable der Reihe nach ab.
Ein Thread wird im Hintergrung ausgeführt, falls du aber eine GUI Komponente verändern willst , muss das im EDT gemacht werden also musst du die beiden Threads synchronisieren mit SwingUtilities#invokeLater...
Ein SwingWorker ist einer gute Hilfsklasse die das für dich abnimmt und dir dafür Methoden anbietet.
 

Zurück
Oben