【问题标题】:Keybinding code not working键绑定代码不起作用
【发布时间】:2013-04-13 21:52:57
【问题描述】:

我一直在尝试学习如何在 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();
            }
        });



    }}

提前致谢!

【问题讨论】:

    标签: java key-bindings


    【解决方案1】:

    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 事件进行绑定:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多