为什么KeyStroke.getKeyStroke(' s',KeyEvent.ALT_MASK)创建Alt-F4键绑定?

时间:2017-05-03 19:50:50

标签: java keylistener key-bindings windowlistener

运行以下内容:

    KeyStroke ks1 = KeyStroke.getKeyStroke('s', KeyEvent.ALT_MASK);
    KeyStroke ks2 = KeyStroke.getKeyStroke(KeyEvent.VK_S, KeyEvent.ALT_MASK);
    KeyStroke ks3 = KeyStroke.getKeyStroke(KeyEvent.VK_F4, KeyEvent.ALT_MASK);

    System.out.println(ks1);
    System.out.println(ks2);
    System.out.println(ks3);

结果:

    alt pressed F4
    alt pressed S
    alt pressed F4

2 个答案:

答案 0 :(得分:1)

这是因为:

  • int'的char值是115
  • KeyEvent.VK_F4的int值为 115

意味着k1k3功能相同。

答案 1 :(得分:1)

没有方法getKeyStroke(char,int),因此编译器扩展了你的char'到一个int并调用getKeyStroke(int,int)。后者需要虚拟密钥代码,而不是unicode字符。

因为(int)'扩展到int 115与VK_F4的巧合,它完全按照你的要求去做:用VK_F4创建一个键绑定并屏蔽ALT。

基本上发生的事情是,你想要为char'创建一个键绑定,但是编译器选择为int 115创建一个键绑定。这是一个简单的假设错误一个不存在的重载,但编译器会替换兼容的,语义不同的重载。