java - 键绑定(bind)代码不起作用

标签 java key-bindings

我一直在尝试学习如何在 Java 中使用键绑定(bind)。到目前为止,这是我所拥有的,但它似乎没有用。当我按“w”时,它应该打印“Hello!”。但是按'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:

//InputMap im = frame.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT);
InputMap im = frame.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

2) 您错误地创建了 KeyStroke。该字符串应包含使用 KeyEvent_VK 时找到的值?。

所以在您的情况下,您可以使用“W”,它会映射到 KeyEvent.VK_W。这将映射到“w”的 keyPressed。

您还可以对 keyTyped 事件进行绑定(bind):

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

关于java - 键绑定(bind)代码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15993331/

相关文章:

java - swing.JTextField java 中的阿拉伯数字

java - 是否有扩展 JUnit4 测试类的约定?

java - 运行Spring MVC项目时出错

java - JAX-RS 2.0 客户端 - 使用 RESTEasy 客户端发送多部分消息

java - java时间戳的奇怪之处——简单的测试失败了?

java - 任何更改 JTable 组件默认行为的方法

python - 键绑定(bind) 1-5 不工作 Tkinter

java - 如何设置按键绑定(bind)?

Java 键绑定(bind) : How does it work?

python - ord() 在 Linux 和 Mac 上捕获箭头键按下