gpt4 book ai didi

java - DispatchKeyEvent 的两次迭代

转载 作者:行者123 更新时间:2023-11-30 03:32:52 25 4
gpt4 key购买 nike

我正在使用 KeyEventDispatcher 来捕获某人按下某个键的时间。

现在我正在使用开关来打印消息:

public boolean dispatchKeyEvent( KeyEvent e ) {

if ( e.getID() == KeyEvent.KEY_PRESSED ){

switch ( e.getKeyChar() ) {
case '\n':
System.out.println( "Equals" );
break;
case '+':
System.out.println( "Addition" );
break;
case '-':
System.out.println( "Subtraction" );
break;
case '/':
System.out.println( "Division" );
break;
case '*':
System.out.println( "Multiplication" );
break;
case '1':
System.out.println( "1" );
break;
case '2':
System.out.println( "2" );
break;
case '3':
System.out.println( "3" );
break;
case '4':
System.out.println( "4" );
break;
case '5':
System.out.println( "5" );
break;
case '6':
System.out.println( "6" );
break;
case '7':
System.out.println( "7" );
break;
case '8':
System.out.println( "8" );
break;
case '9':
System.out.println( "9" );
break;
case 'c':
case '':
System.out.println( "Clear" );
break;
case 'a':
System.out.println( "Clear Everything" );
break;
default:
break;

我得到了两条输出打印行。例如,当我按9时,输出如下:

9
9

当我进入时,它会运行两次:

        java.util.List<KeyEventDispatcher> dispatchers = getKeyEventDispatchers();
if (dispatchers != null) {
for (java.util.Iterator<KeyEventDispatcher> iter = dispatchers.iterator();
iter.hasNext(); )
{
if (iter.next().
dispatchKeyEvent(ke))
{
return true;
}
}
}
return dispatchKeyEvent(ke);
}

知道我做错了什么吗?如果我从 if 语句中取出 switch 语句,我会得到 6 行打印。我想不通!

最佳答案

对于键盘上键入的每个物理键,都会发生以下事件

  • 一个或多个 KEY_PRESSED 事件,具体取决于按住按键的时间
  • 一个 KEY_RELEASED 事件
  • 一个 KEY_TYPED 事件 - 这是由于按下和释放事件而产生的合成事件。

您可能需要改用 KEY_TYPED。另一种可能性是您已注册监听器两次。

关于java - DispatchKeyEvent 的两次迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28593258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com