0

キーバインドに問題があります。このプログラムを作成しましたが、下向き矢印しか検出しません。キーを個別に読み取るにはどうすればよいですか?私は何を間違えましたか?

import java.awt.*;
import java.awt.event.*;
import java.awt.event.ActionEvent;
import javax.swing.*;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.InputMap;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class KeysExample extends JFrame{

    public static void main(final String args[]){
        final JFrame frame = new JFrame("Frame Key");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Action actionSpace = new AbstractAction(){
            public void actionPerformed(ActionEvent actionSpaceEvent){
                Component temporaryLostComponent = null;
                JOptionPane.showMessageDialog(temporaryLostComponent, "Pressed Spacebar");
            }
        };

        Action actionRight = new AbstractAction(){
            public void actionPerformed(ActionEvent actionRightEvent){
                Component temporaryLostComponent = null;
                JOptionPane.showMessageDialog(temporaryLostComponent, "Pressed Right Arrow");
            }
        };

        Action actionLeft = new AbstractAction(){
            public void actionPerformed(ActionEvent actionLeftEvent){
                Component temporaryLostComponent = null;
                JOptionPane.showMessageDialog(temporaryLostComponent, "Pressed Left Arrow");
            }
        };

        Action actionUp = new AbstractAction(){
            public void actionPerformed(ActionEvent actionUpEvent){
                Component temporaryLostComponent = null;
                JOptionPane.showMessageDialog(temporaryLostComponent, "Pressed Up Arrow");
            }
        };

        Action actionDown = new AbstractAction(){
            public void actionPerformed(ActionEvent actionDownEvent){
                Component temporaryLostComponent = null;
                JOptionPane.showMessageDialog(temporaryLostComponent, "Pressed Down Arrow");
            }
        };

        JPanel content = (JPanel) frame.getContentPane();
        KeyStroke space = KeyStroke.getKeyStroke("SPACE");
        KeyStroke right = KeyStroke.getKeyStroke("RightArrow");
        KeyStroke left = KeyStroke.getKeyStroke("LeftArrow");
        KeyStroke up = KeyStroke.getKeyStroke("UpArrow");
        KeyStroke down = KeyStroke.getKeyStroke("DownArrow");

        InputMap inputMap = content.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
        inputMap.put(space, "OPEN");
        inputMap.put(right, "OPEN");
        inputMap.put(left, "OPEN");
        inputMap.put(up, "OPEN");
        inputMap.put(down, "OPEN");
        content.getActionMap().put("OPEN", actionSpace);
        content.getActionMap().put("OPEN", actionRight);
        content.getActionMap().put("OPEN", actionLeft);
        content.getActionMap().put("OPEN", actionUp);
        content.getActionMap().put("OPEN", actionDown);

        frame.setSize(300, 300);
        frame.setVisible(true);
    }
}

また、コードがやや広範で、一部の行がおそらく冗長であることもわかっています。私は初心者なので、このことについてまだ学ぶことがたくさんあります。また、JFrame で作成したウィンドウには何も表示されないことにも気付きました。これは後で説明します。私はこの問題を解決する必要があることを知っています。

4

1 に答える 1

3

ただし、下矢印のみを検出します。

これは、すべてのストロークを「OPEN」キーワードに割り当て、「OPEN」キーワードに割り当てた最後のアクションが downAction であるためです。

各 InputMap/ActionMap の組み合わせには、一意のキーワード名 (「UP」、「DOWN」、「RIGHT」など) が必要です。

KeyStroke.getKeyStroke("");

また、KeyStroke の文字列を構成することはできません。KeyEvent クラスで定義されている名前を使用する必要があります。

KeyEvent.VK_UP becomes "UP"
KeyEvent.VK_DOWN becomes "DOWN"

等..

String の正確な形式については、API を参照してください。

詳細と例については、キーボードを使用したモーションを参照してください。

于 2013-11-02T22:42:40.193 に答える