2011-09-14 25 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

相关问题