Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 键绑定代码不工作_Java_Key Bindings - Fatal编程技术网

Java 键绑定代码不工作

Java 键绑定代码不工作,java,key-bindings,Java,Key Bindings,我一直在努力学习如何在Java中使用键绑定。这是我目前所拥有的,但它似乎不起作用。当我按“w”时,它应该打印“你好!”。但是,按“w”键没有任何作用 import java.awt.*; import java.awt.event.*; import java.net.*; import java.util.HashMap; import java.util.Map; import javax.swing.*; public class Space extends JPanel {

我一直在努力学习如何在Java中使用键绑定。这是我目前所拥有的,但它似乎不起作用。当我按“w”时,它应该打印“你好!”。但是,按“w”键没有任何作用

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.HashMap;
import java.util.Map;
import javax.swing.*;

public class Space extends JPanel {


    public static void createAndShowUI() {
        JFrame frame = new JFrame("Space");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new Space());
        frame.pack();
        frame.setVisible(true);

        Action wKey = new AbstractAction() {
        public void actionPerformed(ActionEvent e) {
        System.out.println("Hello");
    };    
    }; 

        InputMap im = frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
        ActionMap am = frame.getRootPane().getActionMap();
        im.put(KeyStroke.getKeyStroke("w"),"doSomething");
        am.put("doSomething", wKey);


    }



    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                createAndShowUI();
            }
        });



    }}
提前谢谢

1)您正在更改错误的输入映射:

//InputMap im = frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
InputMap im = frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
2) 您创建的击键不正确。字符串应包含在使用KeyEvent_VK?时找到的值

因此,在您的例子中,可以使用“W”,它将映射到KeyEvent.VK_W。这将映射到“W”的按键

您还可以为keyTyped事件执行绑定:

im.put(KeyStroke.getKeyStroke('w'),"doSomething"); // or
im.put(KeyStroke.getKeyStroke("typed w"),"doSomething");