1

なぜそれが起こっているのかをインターネットで検索し、私が知っている方法でコードを変更しようとしても、まだ機能しません。基本的に、シフトがホールドされているときに JFrame を表示させたいと考えています。それが私のコードです:

public DesktopMenu() {
    initComponents();
    setFocusable(true);

    //Listening to the mouse movement to change position of the window
    this.addMouseMotionListener(new MouseAdapter(){
        @Override
        public void mouseMoved(MouseEvent e){
            xPos = e.getX();
            yPos = e.getY();
            setLocation((e.getXOnScreen()-xPos),(e.getYOnScreen()-yPos));
        }
    });
    //This should listen to the key, when it's pressed window just appear.
    this.addKeyListener(new KeyListener(){
        @Override
        public void keyPressed(KeyEvent e){
            if(e.getKeyCode() == KeyEvent.VK_SHIFT){
                setVisible(true);
            }else{
                setVisible(false);
            }
        };
        @Override
        public void keyReleased(KeyEvent e) {
        }

        @Override
        public void keyTyped(KeyEvent e) {
        }
    });
}

new DesktopMenu().setVisible(false);を使用して、標準の Java クラスでウィンドウを実行します。SHIFT を押したままにすると表示されるようにしたいからです。前もって感謝します。

4

1 に答える 1

2

KeyListeners を検索した場合、最も一般的な問題の 1 つ (Swing アプリケーションでは通常回避する必要があること以外) は、リッスンされているコンポーネントにフォーカスがない場合に動作しないことがわかります。 . あなたが抱えている問題は似ていますが、より大きな規模です:リッスンしているアプリケーションにフォーカスがなく、表示されていない場合、KeyListener は機能しません。

要するに、あなたがやろうとしていることは、コア Java では実行できません。Windows 環境で実行している場合は、AutoIt など、これを実行できる別のユーティリティの使用を検討してください。


それはすべて、何をしようとしているのか、どのような環境なのかなどの詳細に依存します。しかし、AutoIt はグローバルなキープレスをリッスンできます。いくつかの方法のいずれかで Java アプリに結び付けることができますが、最も簡単な方法は、標準の入力ソケットと出力ソケットを介してメッセージを相互に送信することです。そして、AutoIt が正しいキー押下を検出すると、メッセージを 経由ConsoleWrite(...)で Java に送信し、Java アプリはスキャナなどを経由してそれを読み取ることで応答します。

ユーザーのコンピューターが完全に機能しなくなるため、シフトキーをホットキーとして使用することは決してないことはわかっています。

于 2013-09-08T02:06:56.247 に答える