2

入力/アクション マップを変更して、アクションを特定のキーにバインドすると、アクションが修飾子+ 特定のキーにもバインドされるようにするにはどうすればよいですか?

すなわちSHIFT_DOWN_MASK + specific key

したがって、すべてのキー バインディングは修飾子なしで機能します。キーボードの特定の文字にサウンド ファイルを割り当てています。そのキーを押すと、サウンド ファイルが再生されます。また、サウンド ファイルをループし、ループするかどうかを切り替え、ループするかどうかを確認するコードもあります。play()アクションをキーにバインドするだけでなく、toggleLoop()アクションをアクションにバインドするようにしたいと考えていSHIFT_DOWN_MASK + specific keyます。

アクションをバインドする場所:

    @SuppressWarnings("serial")
    public void bindKey(JPanel base)
    {
        base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(key),"play"+key);
        base.getActionMap().put("play"+key, new AbstractAction(){
            public void actionPerformed(ActionEvent e) 
            {
                System.out.println(key + " Pressed");
                play();

            }
        });

        //assigning action just the key pressed

        base.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke((char)(key-32), InputEvent.SHIFT_DOWN_MASK),"loop"+(char)(key-32));
        base.getActionMap().put("loop"+(char)(key-32), new AbstractAction(){
            public void actionPerformed(ActionEvent e) 
            {
                System.out.println(key + " toggled loop");
                toggleLoop();
                //fix toggle

            }
        });

        //^ where I try to assign action to modifier



    }
4

1 に答える 1

1

修正済み: (char)(key-32) に変更して、小文字に割り当てるようにしました。これは、シフト修飾子を使用したときに「w」ではなく「W」を設定していたためです。

于 2012-12-05T21:33:58.633 に答える