CapsLock abfragen wenn Fenster wieder aktiviert wird

max40

Bekanntes Mitglied
Moin,
habe ggf ein simples Problem wo ich nichts zu finde.
Wenn ich z.B. im Browser bin und dort Caps Lock aktiviere und dann wieder in meine Java- Anwendung zurück komme, möchte ich den Caps Lock Status ermitteln, leider ist dies nicht der richtige.

Java:
public static void main(String[] args) {
    
	JFrame frame = new JFrame();
	frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	frame.setPreferredSize(new Dimension(200,200));
	
	frame.addWindowListener(new WindowAdapter() {
		@Override
		public void windowActivated(WindowEvent e) {
			 System.out.println("Capslock: " + 
					 Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
		}
      });
	
	frame.pack();
	frame.setVisible(true);
}

Jemand eine Idee/Ratschlag?

Danke+Gruß
Max
 
Hallo.
Meine Erfahrungen zu dem Thema sind zwar schon mindestens ein Jahr alt, aber ich denke nicht dass sich viel geändert hat:

Ich habe auch mal versucht mit reinen Java-Mitteln herauszufinden ob Capslock aktiv ist oder nicht (für Loginfenster), aber bin damals zu dem Ergebnis gekommen, dass es keine zuverlässige Methode gibt, das abzufragen. Das hast du übers ToolKit ja auch schon feststellen können.
Mein Fazit war: Es geht nur über native Methoden: Wenn es dich also nicht stört z.B. JNA zu verwenden und deine Plattformunabh. etwas aufzugeben, kann ich dir sagen, wie man es unter Windows prüft.
 
mir ist gerade beim Testen aufgefallen, dass der Status zumindest wieder beim ersten Eintippen korrekt gesetzt wird,
falls es dir also vor allem um Aktionen während des Tippens geht, kannst du irgendwie derartigen Listener an einer zentralen Stelle vorbeikommen lassen, so dass erst beim ersten Zeichen nach Activated neu geprüft wird oder so
 
@SlaterB: ja, das selbe hatte ich auch schon festgestellt, hätte ich ggf auch noch erwähnen können. Wenn es nur über JNA geht, werde ich auch deinen Vorschlag anwenden:

@KrokoDiehl. Danke für die Info. Aber den Weg werde ich dann ggf. nicht unbedingt gehen. Ggf. könnte du aber für die Nachwelt, die diesen Thread lesen und deinen Vorschlag weiterverfolgen wollen, dein Wissen hier hinterlassen, auch wenn ich dies nicht benötige 🙂
 
damit funktioniert es, was haltet ihr davon?

Java:
public static void main(String[] args) throws AWTException {

	JFrame frame = new JFrame();
	frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	frame.setPreferredSize(new Dimension(200, 200));

	final Robot robot = new Robot();

	frame.addWindowListener(new WindowAdapter() {

		@Override
		public void windowActivated(WindowEvent e) {

			robot.keyPress(KeyEvent.VK_SHIFT);
			robot.keyRelease(KeyEvent.VK_SHIFT);

			System.out.println("Capslock: "
			        + Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK));

		}
	});

	frame.pack();
	frame.setVisible(true);
}
 

Neue Themen


Zurück
Oben