Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Deaktivieren eines Cursors

Empfohlene Antworten

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

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

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);


  }


}

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?

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.

@ 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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.