对于下面的代码,我们有两个行为,输入Til(~)字符键。
在jdk上,1.8.0_101是打印字符=> Til(~)
在Jdk上,1.8.0_171是打印的=>未定义()字符。
我搜索谷歌和甲骨文文档,但没有发现任何关于这一点。
很明显这是最近的事。有艾迪娅吗?
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);
}}


发布于 2018-05-02 06:12:09
根据文档 of getKeyChar()方法,
返回与此事件中的键关联的字符。例如,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());
}发布于 2018-05-03 13:03:06
使用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);
}
}https://stackoverflow.com/questions/50118207
复制相似问题