8

プログラムの最初の起動時にポップアップする解像度選択ダイアログを作成しようとしています。ユーザーを退屈させないようにするために、チェックボックスでそのダイアログをオフにできるかなり標準的な機能を実装したいと思いますが、起動時に Alt キーを押したままにすると元に戻ります。

残念ながら、特定のキーが現在押されているかどうかを Java に問い合わせる明確な方法はありません。KeyListener を介して新しいキーが押されたことを通知されるように登録することしかできませんが、アプリが起動する前にキーが押された場合は役に立ちません。

4

6 に答える 6

4
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);
    }
}
于 2008-10-02T03:41:51.347 に答える
2

元の質問には答えられていないようです。提案された方法は、CapsLock、ScrollLockなどのロックキーの状態を決定します。したがって、Altが押された状態では機能しません。

次のコードを検討してください。

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

唯一の問題は、このクラスがSunの内部JDKクラスであり、他のJVMでは使用できない可能性があることです。プロジェクトによっては、受け入れられる場合と受け入れられない場合があります。

内部的には、Windows上のUser32.DLLを呼び出します。

User32.INSTANCE.GetAsyncKeyState(...)

于 2012-07-29T23:47:47.097 に答える
2

キー押下検出には、イベント ベースとポーリングの 2 種類があります。起動時に(キーが押されているかどうかを常にチェックKEY_PRESSEDするループを介して)キーボードをポーリングすると、起動時にすでに押されているかどうかを検出できます。sleep.thread(timeInMs)

于 2008-10-02T04:07:50.613 に答える
1
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));
}
}
于 2008-10-02T04:14:56.167 に答える
0

したがって、これを実行できるように見えますが、CapsLockなどの場合のみです。したがって、この目的のためにCapsLockを使用するように切り替えました。完璧ではありませんが、大丈夫です。

于 2008-10-03T09:59:08.877 に答える
0

Java についてはよくわかりませんが (ほとんどが C# のコード)、C で記述された小さなローダー プログラムや、いくつかのパラメーター (特定のキーが押されているかどうかなど) を指定して Java アプリを起動するものについてはどうでしょうか?

于 2008-10-02T00:16:26.083 に答える