首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JDK-8 - java.awt.event.KeyEvent.getKeyChar()不工作

JDK-8 - java.awt.event.KeyEvent.getKeyChar()不工作
EN

Stack Overflow用户
提问于 2018-05-01 14:21:33
回答 2查看 1.1K关注 0票数 0

对于下面的代码,我们有两个行为,输入Til(~)字符键。

在jdk上,1.8.0_101是打印字符=> Til(~)

在Jdk上,1.8.0_171是打印的=>未定义()字符。

我搜索谷歌和甲骨文文档,但没有发现任何关于这一点。

很明显这是最近的事。有艾迪娅吗?

代码语言:javascript
复制
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);
}}

EN

回答 2

Stack Overflow用户

发布于 2018-05-02 06:12:09

根据文档 of getKeyChar()方法,

返回与此事件中的键关联的字符。例如,shift + "A“的KEY_TYPED事件返回"a”的值。KEY_PRESSED和KEY_RELEASED事件不是用于报告字符输入。因此,此方法返回的值仅保证对KEY_TYPED事件有意义。

因此,如果您只想报告输入的字符,则应该使用keyTyped()而不是keyReleased()。对我起作用了。下面是keyTyped()方法的代码:

代码语言:javascript
复制
@Override
public void keyTyped(java.awt.event.KeyEvent evt){
    System.out.println(evt.getKeyChar());
}
票数 1
EN

Stack Overflow用户

发布于 2018-05-03 13:03:06

使用keyTyped无法工作,因为getKeyChar()还返回了未定义的char。因此,我在下面的KeyPress上做了一个解决办法。

代码语言:javascript
复制
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);
        }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50118207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档