java中的KeyPressed事件

Posted

技术标签:

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

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

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

【问题讨论】:

这是什么类型的应用程序 - CLI、Swing、Web? 【参考方案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了解更多详情。

【讨论】:

以上是关于java中的KeyPressed事件的主要内容,如果未能解决你的问题,请参考以下文章

觅求高手.java键盘事件.

在 JavaFX 中为 TextField 设置 KeyPressed 事件

在JavaFX中为TextField设置KeyPressed事件

JTable keypressed 事件仅在按下的第一个键时触发

如何忽略 Swing 中的按键事件?

如何拦截swift iOS应用程序的关键事件?