使用下面的代码,我们有两个行为,键入Til(〜)字符键
在jdk 1.8.0_101上打印字符=>直到(〜)
在Jdk上打印1.8.0_171 =>未定义( )字符。
我搜索谷歌和oracle文档,但没有发现任何关于这个。
显然这是最近的事情。
任何Ideia?
public class Sample extends JFrame {
private javax.swing.JTextField jTextField1;
public Sample() {
setSize(200, 80);
setLocationRelativeTo(null);
jTextField1 = new javax.swing.JTextField();
jTextField1.addKeyListener(new java.awt.event.KeyAdapter() {
public void keyReleased(java.awt.event.KeyEvent evt) {
System.out.println(evt.getKeyChar());
}
});
add(jTextField1);
}
public static void main(String[] args) {
new Sample().setVisible(true);
}}
答案 0 :(得分:1)
根据getKeyChar()
方法的documentation,
返回与此事件中的键关联的字符。例如,shift +" a"的KEY_TYPED事件返回" A"的值。 KEY_PRESSED和KEY_RELEASED事件不用于报告字符输入。因此,此方法返回的值保证仅对KEY_TYPED事件有意义。
因此,如果您只是想报告输入的字符,则应使用keyTyped()
代替keyReleased()
。它对我有用。这是keyTyped()
方法的代码:
@Override
public void keyTyped(java.awt.event.KeyEvent evt){
System.out.println(evt.getKeyChar());
}
答案 1 :(得分:0)
使用keyTyped不起作用,因为getKeyChar()也返回了我未定义的char。所以我在下面的KeyPress上做了一个解决方法。
public void keyPressed(KeyEvent evt) {
if (JAVA_8 && evt.getKeyChar() == KeyEvent.CHAR_UNDEFINED) {
callKeyPressedEvent: {
switch (evt.getKeyCode()) {
case 129:
evt.setKeyChar(((evt.getModifiers() & KeyEvent.SHIFT_MASK) == 1) ? '\u0060' : '\u00b4');//` and ´
break;
case 131:
evt.setKeyChar(((evt.getModifiers() & KeyEvent.SHIFT_MASK) == 1) ? '\u005E' : '\u007E');//^ and ~
break;
case 135:
if ((evt.getModifiers() & KeyEvent.SHIFT_MASK) == 1) {
evt.setKeyChar('\u00a8');//¨
break;
}
default:
break callKeyPressedEvent;
}
processKeyEvent(evt);
}
}