2016-11-14 69 views
2

我目前正在用Java构建计算器,并已开始实施 关键侦听器。它工作得很好,但是当我尝试输入脱字符号(^)时,它不会立即注册。您必须先按另一个键才能使其显示。插入(^)不立即注册。 Java关键字侦听器

我想这是因为它使用相同的行为,当您尝试在常规文本文档中键入插入符 。但是有什么办法可以解决这个问题吗?

如果有帮助,这是我的代码来处理的KeyEvents:

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (key.matches("[0-9*/+-=.()^%]")) { 
     controller.getButton(key).fire(); 
    } 
} 

编辑:找到一个解决办法。 Eli Sadoff提到的问题是我的脱字符号是我键盘上的一个死钥匙。由于我的插入符号结合是“移+¨”,我能解决这个问题是这样的:

@Override 
public void handle(KeyEvent ke) { 
    String key = ke.getCharacter(); 

    if (ke.isShiftDown() && ke.getCode() == KeyCode.DEAD_DIAERESIS) { 
     controller.getButton("^").fire(); 
    } 

    else if (key.matches("[0-9*/+-=.()%]")) { 
     controller.getButton(key).fire(); 
    } 
} 
+0

偶然出现'+','(',')'和'%'这个问题吗? –

+0

不,他们都不是。 – Javatar4ever

+1

您的插入键是您计算机上的死锁吗? (意思是输入'^',然后'e'会产生'ê') –

回答

2

的问题是,你正在使用您的计算机对待^为死键输入键盘布局,因为它是一个组合变音符号。解决此问题的方法是将输入键盘布局更改为不会将^作为组合变音符号的键盘。这可以通过键入^ + e并查看它是否导致ê^e

+0

这确实是对的,谢谢! – Javatar4ever

+1

将我的解决方法发布为问题编辑。 – Javatar4ever

+0

@ Javatar4ever好的工作! –

相关问题