【问题标题】:Swing's KeyStroke.getKeyStroke() returns UNKNOWNSwing 的 KeyStroke.getKeyStroke() 返回 UNKNOWN
【发布时间】:2019-05-17 12:23:06
【问题描述】:

下面的字符是俄语字符

KeyStroke.getKeyStroke('П', ActionEvent.CTRL_MASK).getKeyCode(); // returns (int) 1055
KeyStroke.getKeyStroke(1055, ActionEvent.CTRL_MASK); //returns (javax.swing.KeyStroke) ctrl pressed UNKNOWN

但适用于 'C' 之类的字符

KeyStroke.getKeyStroke('C', 2).getKeyCode(); // returns (int) 67
KeyStroke.getKeyStroke(67, ActionEvent.CTRL_MASK); //returns (javax.swing.KeyStroke) ctrl pressed C

对于字符“C”的显示方式,我怎样才能使它适用于俄罗斯字符。

【问题讨论】:

    标签: java swing unicode keystroke


    【解决方案1】:

    KeyStroke 上的 toString() 方法连接自

    • 修饰符文本(ctrl、alt、...)
    • “释放”或“按下”取决于onKeyRelease 标志
    • 与KeyEvent(AWTKeyStroke.getVKText(keycode))中的常量对应的VK(虚拟键)文本

    您的代码一切正常,只有 'П' 键在 KeyEvent 类中没有对应的 VK_ 常量。有关所有已识别常量的列表,请参阅 KeyEvent Javadoc, Constants。

    是否要提取与按下的键对应的字符? 在这种情况下,请使用:

    char c = (char) keyStroke.getKeyCode();
    

    【讨论】:

    • 键码不是字符。这就是 KeyEvent 和 KeyStroke 类对键码和字符有不同方法的原因。
    • @Pater,谢谢。我的用例是,我有一个以 char 'П' 开头的菜单选项名称,现在我想为此菜单选项分配一个快捷键(在本例中为 Ctrl + П),现在在菜单中我看到类似这个“П***** Ctrl + Unknown keyCode: 0x41f”。同样的事情也适用于英语,因为正如你所说,char 'C' 有相应的键
    猜你喜欢
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多