MouseEvents vor den Components abfangen?

Status
Nicht offen für weitere Antworten.

K-Man

Bekanntes Mitglied
Hallo.
Jetzt hab ich mal ne Frage 😉
Ich habe in einem Fenster viele kleine Componenten, die man anklicken kann. Jetzt möchte ich, dass man zu bestimmten Zeiten nichts abklicken kann. Ich könnte zwar alle Components vom MouseListener entfernen und später wieder hinzufügen, aber das wäre ein wenig zu umständlich. Gibt es eine andere Möglichkeit? ZB dass die MouseEvents von der GlassPane abgefangen werden und somit nicht zu den Components durchkommen? Oder kann ich eine unsichtbare Component über die anderen legen?
Vielleicht hatte von euch schon jemand das Problem und kann mir weiterhelfen.
Danke schon mal 😀
 
Ich hab jetzt zwei mehr oder weniger gute Möglichkeiten gefunden:

Ich kann das ganze Fenster deaktivieren: nicht so gut:

Ich kann die GlassPane sichtbar machen und einen leeren MouseAdapter hinzufügen...:
Code:
getGlassPane().setVisible(true);
getGlassPane().addMouseListener(new MouseAdapter()	{});
Der Nachteil ist hier, dass ich das Fenster nur noch per SystemMenu schließen kann. Der Rest kann keine MouseEvents mehr abfangen...
 
Was ist daran so umständlich, die Components vom MouseListener zu entfernen? Schreib halt alles in eine Methode.
 
Illuvatar hat gesagt.:
Was ist daran so umständlich, die Components vom MouseListener zu entfernen? Schreib halt alles in eine Methode.
Ich meinte nicht umständlich im Sinne von viel Code, sondern von der Effizienz...
 
Java benutzt fürs event dispatching eine verlinkte Liste. Das heisst, wenn du eine Event Listener hinzufügst oder entfernst, wird halt in der Liste ein Element hinzugefügt / entfernt. Ich denke nicht, dass das ineffizient ist. Du willst die Maus ja auch nicht 1000000 mal pro Sekunde deaktivieren sondern höchstens alle paar Sekunden einmal.
Da gibt es also mit Sicherheit keine Probleme.

Eine andere Möglichkeit wäre eine Variable zu benutzen. Sowas wie boolean aktiv;
Die kannst du dann auf false setzen und fragst in deinem MouseListener die Variable ab.

Oder du machst es dir ganz einfach und machst einfach button.setEnabled(false); Dann kannst ihn auch nicht mehr anklicken + er wird auch noch als deaktiviert angezeigt (ausgegraut).
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben