【问题标题】:KeyPressed event in javajava中的KeyPressed事件
【发布时间】:2012-10-14 02:19:38
【问题描述】:

我刚刚创建了一个 java tic-tac-toe 游戏,我想弄清楚在特定条件下按下回车键后如何运行一个方法,下面是一个示例...

if(/*condition is met*/){
     //keyListener
}

【问题讨论】:

  • 这是什么类型的应用程序 - CLI、Swing、Web?

标签: java swing awt keylistener key-bindings


【解决方案1】:

根据您想在哪里捕获“输入”键,您可以使用 ActionListener(在诸如文本组件或按钮等组件上)或将 key binding 附加到您的组件

public class MyPanel extends JPanel {

    public MyPanel() {

        InputMap im = getInputMap(WHEN_FOCUSED);
        ActionMap am = getActionMap();

        im.put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "onEnter");

        am.put("onEnter", new AbstractAction() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Enter pressed
            }
        });

    }

}

这将依赖于被聚焦的组件。

【讨论】:

  • 我在 WHEN_FOCUSED 和 getActionMap() 上遇到错误;方法调用
  • 他们都说找不到符号
  • 您需要将键绑定应用到 Swing 组件(扩展自 JComponent)。为您的问题提供更多背景信息会更容易指导您
【解决方案2】:

警告 - 自从我做桌面应用程序以来已经有一段时间了,但是 java.awt.Component 类有一个 addKeyListener() 方法,您可以使用它来注册一个实现 KeyListener 的类 - 这就是您要找的吗?

【讨论】:

  • 但是我会在什么上设置keylistener?
  • 您接受的答案使用 JPanel。 Jpanel 是一种 Component,因此继承了 addKeyListener() 方法。我想问题是,您需要哪些组件来监听关键事件并将其添加到其中。顺便说一句,我并不是说我的答案更好!
【解决方案3】:

一种方法是实现KeyListener 接口及其关键事件方法。例如,

public class MyClass  implements KeyListener {
    public void keyTyped(KeyEvent e) {
        // Invoked when a key has been typed.
    }

    public void keyPressed(KeyEvent e) {
        // Invoked when a key has been pressed.
        if (e.getKeyCode() == KeyEvent.VK_ENTER && yourOtherCondition) {
            myMethod();
        }
    }

    public void keyReleased(KeyEvent e) {
        // Invoked when a key has been released.
    }
}

然后添加这个监听器

myComponent.addKeyListener(new MyClass());

或者,如果您愿意,

myComponent.addKeyListener(new KeyListener() {
    public void keyPressed(KeyEvent e) { /* ... */ }

    public void keyReleased(KeyEvent e) { /* ... */ }

    public void keyTyped(KeyEvent e) { /* ... */ }
});

See this了解更多详情。

【讨论】:

    猜你喜欢
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多