Zum Inhalt springen

Deaktivieren eines Cursors


Empfohlene Beiträge

Geschrieben

Servus...

während einer langen Wartezeit brauche ich einen Cursor, der nicht nur die Sanduhr anzeigt (ist in Java sowieso net sooo ... dauerhaft ;) ), sondern auch deaktiviert wird.

Der Cursor soll für eine angegebene Zeitspanne auf keine Klicks mehr in einem angegebenen Fenster reagieren.

Ich wäre schon mit einem Lösungsansatz zufrieden... :confused:

Vielen Dank und liebe Grüße

Nixaja

Geschrieben

Wie wäre es mit einem modalen Fenster, welches einen "Warten"-Dialog anzeigt und sich nach Beendigung der Berechnung selbst schließt?

Dadurch ist der Zugriff auf die darunterliegenden Komponenten ja gesperrt und somit auch kein Zugriff darauf möglich.

Man muss nur nach der Berechnung darauf achten, den Dialog wieder zu schließen.

Das würde mir auf Anhieb einfallen.

gruss

markus

Geschrieben
Der Cursor soll für eine angegebene Zeitspanne auf keine Klicks mehr in einem angegebenen Fenster reagieren.

Der Cursor reagiert sowieso nicht auf irgendwelche Clicks... der ist sozusagen nur die visuelle Bestätigung, wo denn gerade die Aktion auf dem Window statt findet. Reagieren tun nur die Komponenten selber - und genau hier musst du auch ansetzen, wenn du etwas sperren willst.

Soll ein Fenster keine Clicks, etc. mehr behandeln, so musst du auch alle Komponenten, die in diesem Fenster sitzen deaktivieren.

Als Beispiel in etwa sowas:


public class TestClass {


  public void actionPerformed(ActionEvent e) {


    // Make components inaccessible

    JButton button1   = this.getButtonFromSomewhere();

    JTextField field1 = this.getTextFieldFromSomewhere();

    button1.setEnabled(false);

    field1.setEnabled(false);


    // Perform action

    try {

      this.doStuff();

    } finally {


      // Ensure, that all components are visible again

      button1.setEnabled(true);

      field1.setEnabled(true);


    }


  }


}

Um den Cursor selber zu ändern, so gilt auch hier: An den Cursor allgemein kommst du nicht ran. Du kannst nur einer Komponente sagen "Wenn der Cursor über dir ist, dann verwende Form XYZ. Auch hier wieder ein Beispiel:

public class TestClass {


  public void actionPerformed(ActionEvent e) {


    // Install a hand cursor, if the mouse moves over the current button

    JButton button    = this.getButtonFromSomewhere();

    Cursor handCursor = new Cursor(Cursor.HAND_CURSOR);

    button.setCursor(handCursor);


  }


}

Geschrieben
Der Cursor reagiert sowieso nicht auf irgendwelche Clicks... der ist sozusagen nur die visuelle Bestätigung, wo denn gerade die Aktion auf dem Window statt findet. Reagieren tun nur die Komponenten selber - und genau hier musst du auch ansetzen, wenn du etwas sperren willst.

Das Problem ist, dass ich eben diese Cursor Klicks nicht abfangen kann...

Wenn das Fenster arbeitet, reagiert es immer noch auf die Minimieren/Deminimieren Buttons. Erst nach der Abarbeitung werden meine zugehörigen Handle Events aufgerufen.

Ich habs mir jetzt so gedacht: Während einer Verarbeitung sperre ich das komplette Fenster. Dann wird auch die Header Leiste des Fensters nicht mehr angesprochen. Leider wird nun auf keine Cursor Verformungen mehr reagiert... also keine Sanduhr... :cool:

@ Krain

Ein modales Wartefenster ist ansich eine gute Idee. Allerdings können unter dem momentan bearbeiteten Fenster noch mehrere "Eltern" Fenster liegen, die ebenfalls nicht beachtet werden dürfen...

Mehr als das aufrufende Fenster zu disablen macht das modale Fenster ja nicht, oder?

Geschrieben
Wenn das Fenster arbeitet, reagiert es immer noch auf die Minimieren/Deminimieren Buttons. Erst nach der Abarbeitung werden meine zugehörigen Handle Events aufgerufen.

Ich habe gerade mal ein bisschen rumgespielt und bin in meiner ursprünglichen Meinung bestätigt worden: Es scheint generell keine Möglichkeit zu geben, das Minimieren/Maximieren zu verhindern. Du kannst mitbekommen, wann es passiert aber kannst nicht beeinflussen _ob_ es passiert.

Was mir als Alternative einfallen würde: Lass einfach die Titelleiste komplett weg. Erzeuge dein Fenster entweder über ein JWindow oder verwende bei JFrame/JDialog setUndecorated(true).

In Kombination mit setAlwaysOnTop(true) erhälst du so ein Fenster, das auf jeden Fall im Vordergrund beim User ist, und das er nicht wegklicken kann.

Ich habs mir jetzt so gedacht: Während einer Verarbeitung sperre ich das komplette Fenster. Dann wird auch die Header Leiste des Fensters nicht mehr angesprochen. Leider wird nun auf keine Cursor Verformungen mehr reagiert... also keine Sanduhr... :cool:

Naja dann musst du entweder den von mir oben beschriebenen Weg gehen, oder du machst dem User innerhalb des Frames klar, dass eine Aktion in Bearbeitung ist, durch eine Sanduhr als animiertes GIF, eine ProgressBar oder ähnliches.

Geschrieben

@ Krain

Ein modales Wartefenster ist ansich eine gute Idee. Allerdings können unter dem momentan bearbeiteten Fenster noch mehrere "Eltern" Fenster liegen, die ebenfalls nicht beachtet werden dürfen...

Mehr als das aufrufende Fenster zu disablen macht das modale Fenster ja nicht, oder?

Aber wenn du das modale Fenster von deinem Root-Fenster aus abschickst sind doch alle darunterliegenden gesperrt.

Oder handelt es sich um unterschiedliche Anwendungen, auf die Du den Zugriff verweigern willst.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...