2012-10-24 40 views
3

我剛剛創建了一個java井字遊戲,我想弄清楚如何在某個條件下按下回車鍵時運行方法,例如下面的例子...java中的KeyPressed事件

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

這是什麼樣的應用程序 - CLI,Swing,Web? – Romski

+0

謝謝Andrew Thompson的編輯建議 – CodeLover

+0

@Romski swing應用程序 – CodeLover

回答

5

根據要陷阱「ENTER」鍵,你可以使用一個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 
      } 
     }); 

    } 

} 

這將依賴在關注的組件上。

+0

我得到WHEN_FOCUSED,和getActionMap()的錯誤;方法調用 – CodeLover

+0

他們都說找不到符號 – CodeLover

+0

您需要將鍵綁定應用於Swing組件(從'JComponent'擴展)。你的問題的一點點上下文會讓你更容易引導你 – MadProgrammer

1

警告 - 我做了桌面應用程序已經有一段時間了,但是java.awt.Component類有一個addKeyListener()方法,您可以使用它來註冊實現KeyListener的類 - 這正是您要查找的內容嗎?

+0

但是我會設置keylistener? – CodeLover

+0

您接受的答案使用JPanel。 Jpanel是一種Component,因此繼承了addKeyListener()方法。我想問題是,您需要監聽哪些關鍵事件並將其添加到該事件中。順便說一句,我不是說我的答案更好! – Romski

2

一種方法是實現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