Frage

Ich versuche, eine Auflösung Auswahldialog zu schreiben, das erscheint, wenn ein Programm zum ersten Mal gestartet wird. Um zu verhindern, den Benutzer langweilig, mag ich das ziemlich Standard-Feature implementieren, die Sie diesen Dialog mit einer Checkbox deaktivieren, aber es zurück, indem Sie die Alt-Taste beim Start.

Leider gibt es keine offensichtliche Möglichkeit Java zu fragen, ob ein bestimmte Schlüssel zur Zeit gedrückt wird, . Sie können nur über eine KeyListener informiert neuer Tastendrücke registrieren, aber das hilft nicht, wenn der Tastendruck, bevor die App startet beginnt.

War es hilfreich?

Lösung

public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        System.out.println("caps lock2 = "
                + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
}
}

Andere Tipps

import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;

public class LockingKeyDemo {
    static Toolkit kit = Toolkit.getDefaultToolkit();

    public static void main(String[] args) {
        JFrame frame = new JFrame();

        frame.addWindowListener(new WindowAdapter() {
            public void windowActivated(WindowEvent e) {
                System.out.println("caps lock1 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));

                try {
                    Robot robot = new Robot();
                    robot.keyPress(KeyEvent.VK_CONTROL);
                    robot.keyRelease(KeyEvent.VK_CONTROL);
                } catch (Exception e2) {
                    System.out.println(e2);
                }

                System.out.println("caps lock2 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
            }
        });

        frame.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                System.out.println("caps lock3 = "
                        + kit.getLockingKeyState(KeyEvent.VK_CAPS_LOCK));
            }
        });

        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(200, 200);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }
}

Nun gibt es zwei Arten von Tastendruck-Erkennung: Ereignis basiert, und Polling. Wenn Sie die Tastatur für KEY_PRESSED beim Start abfrage (durch eine Schleife mit einem sleep.thread(timeInMs) ständig überprüft, ob Ihr Schlüssel nach unten), dann kann man erkennen, ob es bereits beim Start gedrückt wird.

Die ursprüngliche Frage scheint nicht beantwortet zu werden. Das vorgeschlagene Verfahren bestimmt den Verriegelungsschlüssel Zustand wie CapsLock, ScrollLock usw. So ist es nicht funktionieren würde, Alt gedrückten Zustand.

Betrachten Sie den folgenden Code ein:

com.sun.jna.platform.KeyboardUtils.isPressed(java.awt.event.KeyEvent.VK_ALT);

Das einzige Problem ist, dass diese Klasse eine interne Suns JDK-Klasse ist und wahrscheinlich nicht in jedem anderen JVM zur Verfügung steht. Verlassen Sie sich auf Ihr Projekt kann es oder nicht akzeptabel sein kann.

Intern ruft sie in User32.DLL unter Windows:

User32.INSTANCE.GetAsyncKeyState(...)

Ich weiß nicht viel über Java (meist Code in C #), aber was ist ein kleines Ladeprogramm in C oder etwas geschrieben hat, das dann mit einigen Parametern Java-App startet (wie, ob ein bestimmte Schlüssel ist, nach unten) ?

So scheint es, dass Sie dies tun können, aber nur für Caps Lock et al. Daher habe ich mit Kappen für diesen Zweck sperren geschaltet. Nicht perfekt, aber in Ordnung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top