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事件的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaFX 中为 TextField 设置 KeyPressed 事件
在JavaFX中为TextField设置KeyPressed事件