In windowClosing() abfragen, ob STRG gedrückt wurde

Hutmacher

Bekanntes Mitglied
Hallo!
In meinem Programm sollen bei einem Klick auf den Schließen-Button (Windows) Daten gespeichert werden. Wird allerdings beim Schließen die STRG-Taste gehalten, sollen die Daten nicht gespeichert werden.

Wie kann ich also z.B. aus der windowClosing()-Methode eines JFrames abfragen, ob momentan STRG gedrückt ist? Ist das direkt in der Methode abfragbar oder muss ich den Umweg über keyPressed, keyReleased und einer Instanzvariablen gehen?

Danke :)
 

NoXiD

Bekanntes Mitglied
mir würde da nur ein Shutdown-Hook einfallen. Ein Shutdown-Hook ermöglicht es dir, vor dem schließen der JVM noch Aktionen auszuführen (Daten speichern). Der richtige Zeitpunkt zum überprüfen ob Strg beim klick auf [x] gedrückt wird ist das allerdings nicht. Du könntest eine Variable
Code:
isStrgPressed
immer auf true Setzen wenn Strg gedrückt ist, dann diese in der Hook abfragen... Würde mir als erste Idee einfallen ;)
 

Gucky

Top Contributor
Gibts nicht auch die Möglichkeit einen WindowListener zu implementieren und darin zu überprüfen, ob strt gedrückt wurde? Ist das vielleicht ein bisschen einfacher?
 

Hutmacher

Bekanntes Mitglied
Danke für eure Antworten :)

@Gucky: Leider nicht :( Die Methoden des WindowListeners (windowClosing und der gleichen) bekommen als Argumente WindowEvents, die aber leider keine "isControlDown"-Methode oder "getModfiers" wie in bspw. KeyEvent anbieten.

@NoXiD: So ähnlich habe ich mir auch meinen alternaiven Weg vorgestellt^^ Das Blöde ist nur, dass ich mich dann um so Sachen kümmern muss wie: Was passiert, wenn ich STRG drücke, dann den Fokus auf ein anders Fenster wechsle, und STRG wieder loslasse? Was passiert, wenn ich unerwarteterweise mal in modaler Dialog ins Programm schiebt und ich dann STRG loslasse? Was passiert, wenn ich schon vorm Start des Programms STRG halte und dann schließen möchte? Was passiert, wenn ich beide STRG-Tasten gleichzeitig drücke?

Das sind natürlich alles Dinge, um die man sich kümmern kann (per komplexen Status-Abfragen, FocusListeners, Timer etc.). Aber das ist natürlich umständlich und man übersieht womöglich irgendwelche Randbedingungen^^
 
Zuletzt bearbeitet:

ssoul26

Bekanntes Mitglied
Nicht perfekt aber macht was es soll :)

Java:
public class Main {
   /**
    * @param args
    */
   public static void main(String[] args) {
     new tesat();
   }



}

Java:
public class tesat extends JFrame {
   public tesat() {
      super();
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      addWindowListener(new wlist(this));
      setLocationRelativeTo(null);
      setSize(400, 400);
      setVisible(true);
   }
}
Java:
public class wlist implements WindowListener, KeyListener {
   private boolean pressed;

   public wlist() {
      super();
   }

   public wlist(Component c) {
      super();
      c.addKeyListener(this);
   }

   @Override
   public void keyTyped(KeyEvent e) {
      // TODO Automatisch generierter Methodenstub
   }

   @Override
   public void keyPressed(KeyEvent e) {
      if (e.getKeyChar() == 'e') {
         pressed = true;
         System.out.println("ok");
      }
   }

   @Override
   public void keyReleased(KeyEvent e) {
      if (e.getKeyChar() == 'e') {
         pressed = false;
      }
   }

   @Override
   public void windowOpened(WindowEvent e) {
      // TODO Automatisch generierter Methodenstub
   }

   @Override
   public void windowClosing(WindowEvent e) {
      if (pressed) {
         System.out.println("Arbeite alles ab");
      } else {
         System.out.println("Mach dich zu");
      }
   }

   @Override
   public void windowClosed(WindowEvent e) {
   }

   @Override
   public void windowIconified(WindowEvent e) {
      // TODO Automatisch generierter Methodenstub
   }

   @Override
   public void windowDeiconified(WindowEvent e) {
      // TODO Automatisch generierter Methodenstub
   }

   @Override
   public void windowActivated(WindowEvent e) {
      // TODO Automatisch generierter Methodenstub
   }

   @Override
   public void windowDeactivated(WindowEvent e) {
      // TODO Automatisch generierter Methodenstub
   }
}
 

Hutmacher

Bekanntes Mitglied
@ssoul26: Danke, dass du dir die Mühe gemacht hast, mir das Beispiel zu schreiben :) Allerdings glaube ich, dass bei dieser Methode ein paar kleine Probleme entstehen könnten. Siehe dazu mal meine Antwort an NoXiD im vorigen Post :)
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Hallo,

ich denke, dass nicht nur die technische Ebene betrachtet werden sollte. Dieses Bedienkonzept finde ich etwas zweifelhaft.

Was spricht gegen die gewohnten Bedienkonzepte?
- Also z.B. Ok/Cancel Buttons wenn es ein dialogartiges Fenster ist
- Also ein File -> Save Menu zum Speichern (Bei Dokumenten die bearbeitet werden).
- Einer Abfrage, wenn ungespeicherte Daten im Fenster sind und der Benutzer es schliessen möchte

Ich würde schon etwas verstört reagieren, wenn meine Daten weg sind, nur weil die strg Taste mal hing oder gedrückt wurde. (Nutze ich z.B. als Aktivator für das Micro bei TS3 und ist teil der Hostkey Kombo bei meiner vmware workstation installation....)

Mit den besten Grüßen,

Konrad
 

Hutmacher

Bekanntes Mitglied
@kneitzel: Deinen Gedankengängen würde ich auch unmittelbar zustimmen. In der Tat habe ich sie sogar schon umgesetzt, allerdings noch mit ein paar Konfigurationsmöglichkeiten. Damit ich nicht das Ganze System dahinter erklären muss: Ich bin derzeit nur an der technischen Umsetzung interessiert :) Aber trotzdem danke!
 

Tobse

Top Contributor
@kneitzel: Deinen Gedankengängen würde ich auch unmittelbar zustimmen. In der Tat habe ich sie sogar schon umgesetzt, allerdings noch mit ein paar Konfigurationsmöglichkeiten. Damit ich nicht das Ganze System dahinter erklären muss: Ich bin derzeit nur an der technischen Umsetzung interessiert :) Aber trotzdem danke!

Also die Instanzvariable wäre auch das einzige, was mir einfällt. Das liese sich dann auch gut in eine eigene Klasse auslagern damit es dein JFrame nicht zumüllt aber an den beschriebenen Problemen wie STRG wird gedrückt, focus kommt aufs Fenster, [X] wird gedrückt änder das nichts.
Es wäre nur mal interessant, ob nicht generell ein KeyReleased-Event ausgelöst wird, wenn das Fenster den Focus verliert => testen!

Aber: ich denke über JNI solltest du direkt die Tastatur ansprechen können (genauer das OS, da sollte es eigentlich Methoden/Routinen alá
Code:
isKeyDown(int keyCode)
geben) und mit großer Wahrscheinlichkeit zuverlässig feststellen können, ob STRG gedrückt ist.
Wenn das OS mal rumspinnt kannst du halt nichts machen, da ist dann ein Modaler Dialog schon sicherer. Ich persönlich würde mich ärgern, wenn Daten verloren gehen weil Windows bissl langsam war mit reagieren (wenn es mal wieder hängt).
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Button-Sprache und windowClosing Allgemeine Java-Themen 6
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
D TextBox Abfragen Allgemeine Java-Themen 2
kodela aktuelle Position des Hauptfensters abfragen Allgemeine Java-Themen 12
J Tonhöhe & Lautstärke abfragen? Allgemeine Java-Themen 3
K USB infos unter Linux abfragen? Allgemeine Java-Themen 2
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
MiMa Variableninhalte dynamisch abfragen Allgemeine Java-Themen 12
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
Z AD Abfragen mit Java! Allgemeine Java-Themen 3
L Abfragen ob Threads fertig Allgemeine Java-Themen 3
chuxXo BasicPlayer - Beendigung Abfragen (Allgemein) Allgemeine Java-Themen 21
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
M Aktuelle Systemzeit und Datum abfragen Allgemeine Java-Themen 2
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
P Variablen Werte der Objektvariablen mit getFields() abfragen Allgemeine Java-Themen 2
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
J XML Inhalt von Web abfragen Allgemeine Java-Themen 6
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
S HTTP Filmgenre aus dem Internet abfragen! Allgemeine Java-Themen 6
M Zahl aktiver Threads einer Gruppe verlässlich abfragen Allgemeine Java-Themen 3
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
E Unique Ids abfragen? Allgemeine Java-Themen 5
Airwolf89 Wahrheitstabelle abfragen Allgemeine Java-Themen 3
M ständiges abfragen einer .txt Allgemeine Java-Themen 2
S Zeitserver Abfragen und in Date speichern Allgemeine Java-Themen 5
V Hostname abfragen gelingt nicht immer Allgemeine Java-Themen 2
H Windows abfragen Allgemeine Java-Themen 2
M Enter Taste in Konsole abfragen Allgemeine Java-Themen 2
N IP-Adresse Eingabe abfragen? Allgemeine Java-Themen 4
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
C Batchdatei ausführen und Ergebnisse abfragen Allgemeine Java-Themen 8
M Vermeiden von instanceof Abfragen Allgemeine Java-Themen 3
M SQL-Installation abfragen Allgemeine Java-Themen 14
Z Wetterdaten abfragen Allgemeine Java-Themen 5
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
R Zugriffsrechte abfragen Allgemeine Java-Themen 2
R boolean im Bean abfragen Allgemeine Java-Themen 18
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Mausbewegung abfragen? Allgemeine Java-Themen 2
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
H Mit Java Desktop abmessungen height/width abfragen Allgemeine Java-Themen 20
H Sekunden messen wie lange h.ibernate/jdbc abfragen brauchen Allgemeine Java-Themen 7
G Abfragen des types Allgemeine Java-Themen 7
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
P verfügbare COM Schnitstellen abfragen Allgemeine Java-Themen 4
P <null> in einer DB abfragen Allgemeine Java-Themen 4
S Wie Carriage Return Line Feed abfragen. Allgemeine Java-Themen 6
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
T Tastatur global abfragen Allgemeine Java-Themen 2
M Map gezielt abfragen? Allgemeine Java-Themen 5
MQue Vereinfachung von if- Abfragen Allgemeine Java-Themen 21
Chris_1980 Mausbewegung abfragen Allgemeine Java-Themen 4
E Events von inneren Klasse abfragen Allgemeine Java-Themen 7
B jre version in der html-datei für ein applet abfragen Allgemeine Java-Themen 5
S Prozessorauslastung abfragen Allgemeine Java-Themen 2
C Tastatureingabe in einem Frame abfragen Allgemeine Java-Themen 2
R Thread.sleep - abfragen Allgemeine Java-Themen 4
S Name der ausführenden jar-Datei abfragen Allgemeine Java-Themen 11
S Abfragen der Komponente bei actionperformed Allgemeine Java-Themen 2
A Dateistatus abfragen und Datei löschen sobald kein Zugriff Allgemeine Java-Themen 7
G JavaMail - Message vom Server, wie abfragen? Allgemeine Java-Themen 2
J Name des aktuell aktiven Windows-Fensters abfragen? Allgemeine Java-Themen 4
T Bittorrent TRACKER abfragen mit JAVA Allgemeine Java-Themen 4
C Threads abfragen, aber wie? Allgemeine Java-Themen 3
J ArrayList mit SQL abfragen ? Allgemeine Java-Themen 6
thE_29 ? in einem String abfragen Allgemeine Java-Themen 7
S Key Listener mit Strg + s Allgemeine Java-Themen 12
S Strg+V ohne Fokus simulieren! Allgemeine Java-Themen 12
N Abkürzung STRG-G zu programmieren Allgemeine Java-Themen 4
D auf STRG reagieren befor Grafikkomponente Allgemeine Java-Themen 4
F abprüfen ob zb strg + alt + entf gedrückt wurde Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben