我有KeyEvent.KEY_TYPED
我在其上执行输入检查,在此期间我获得全文:
text = text + event.getCharacter();
但我需要确保只添加用户可以输入的可接受字符,包括所有数字,字母和特殊字符。已经应用程序应该支持英语,爱沙尼亚语和俄语,并且将来会添加更多语言。排除regex
,Esc
等的Backspace
应该是什么类型?
答案 0 :(得分:1)
KEY_TYPED仅与视觉上显示为输入的键有关(因此键键入)。要操作(并禁止)按下控制键(如退格键),您应该查看其他事件,例如keyPressed和keyReleased。他们也会收到控制字符的通知。
“键入类型”事件是更高级别的,通常不依赖于 平台或键盘布局。它们是在Unicode时生成的 输入字符,是了解的首选方式 字符输入。在最简单的情况下,生成键类型事件 通过单键按压(例如,'a')。然而,通常,角色是 由一系列按键产生的(例如,'shift'+'a')和 从按键事件到关键类型事件的映射可以是多对一的 或多对多。通常不需要密钥发布来生成 密钥类型事件,但在某些情况下键入的事件是 在密钥被释放之前不会生成(例如,输入ASCII序列) 通过Windows中的Alt-Numpad方法)。 没有键入的事件 为不生成Unicode字符的密钥生成(例如, 动作键,修饰键等。)
然而,从用户的角度来看,禁止例如退格确实存在问题。如果您想要走这条路线,请注意您已经考虑过所有相关的使用场景。由于keytyped事件没有得到任何控制字符,也许它已经在做你想要它做的事情。
答案 1 :(得分:1)
要匹配控件字符以外的任何字符,您可以使用
"\\P{Cc}"
或
"\\P{Cntrl}"