2011-09-14 27 views
0

我需要讓我的程序從鍵盤輸入數字,但需要輸入多個數字的數字。兩個或多個數字輸入的擊鍵之間的延遲

我的聽衆是這樣的:

class.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(49,0, false), "one"); 
class.getRootPane().getActionMap().put("one", new AbstractAction() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("1 pressed"); 
    } 
}); 
      //2 
class.getRootPane().getInputMap(JRootPane.WHEN_IN_FOCUSED_WINDOW).put(
    KeyStroke.getKeyStroke(50,0, false), "two"); 
class.getRootPane().getActionMap().put("two", new AbstractAction() { 

    @Override 
    public void actionPerformed(ActionEvent e) { 
     System.out.println("2 pressed"); 
    } 
}); 

我建議有一個全球性的整數存儲,其中,如果明確會導致類似的動作:

if (numberfield.isEmpty()){ 

    number = 1; 

    wait for half a second 

    if wait is over commit number to function and clear numberfield 
}//resulting in "1" 

else if (numberfield.isnotEmpty()){ 
    "you must have caught it in time" 
    numberfield = "numberfield"+"1"; 

    wait for half a second 

    if wait is over commit number to function and clear numberfield 
}//resulting in "11" if 1 was pressed twice 

我的問題是:什麼是實現這種「延遲」的最好方法。恐怕Thread.sleep(500);或類似的東西會導致我的聽衆停止工作。有沒有更容易的方法來做到這一點比設置一個計時器和檢查每半秒?

+1

不理解你爲什麼需要延遲,你想達到什麼目的? – kleopatra

+0

請注意'class'是一個保留[關鍵字](http://java.sun.com/docs/books/jls/third_edition/html/lexical.html#3.9)。 – trashgod

回答

1

數我不知道你是基於貼代碼做什麼。您正在嘗試使用根窗格,這表明您的GUI上沒有任何可調焦組件。

最簡單的解決方案是將DocumentListener添加到每個文本字段。無論何時生成DocumentEvent,您都可以啓動/重新啓動計時器。如果計時器觸發,則您提交號碼並清除該字段。

如果您正在爲GUI上的所有文本字段執行此操作,則可能更容易檢出Global Event Listeners。您應該可以使用KeyEventPostProcessor。每次生成KeyEvent時,都要重新啓動計時器。如果計時器觸發,則您提交號碼並清除該字段。

-1

我認爲這將是最好只使用一個監聽器:

KeyListener l = new KeyListener() { 
    long lastPress = System.currentTimeMillis(); 
    public void keyPressed(KeyEvent e) { 
     if (e.getKeyChar() == '0' || e.getKeyChar() == '1' || e.getKeyChar() == '2' || e.getKeyChar() == '3' || ..........(keys you want)...) { 
      if (System.currentTimeMillis() - lastPress >= delay) { 
       lastPress = System.currentTimeMillis(); 
       yourInputString += e.getKeyChar(); 
      } 
     } 
    } 
} 

addKeyListener(l); 

然後得到投入使用int number = Integer.intValue(yourInputString);

+0

-1用於暗示一個keyListener(你很幸運我今天沒有選票了:-) – kleopatra

相關問題