运行以下内容:
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
答案 0 :(得分:1)
这是因为:
int
'的char
值是115 KeyEvent.VK_F4
的int值为 115 意味着k1
和k3
功能相同。
答案 1 :(得分:1)
没有方法getKeyStroke(char,int),因此编译器扩展了你的char'到一个int并调用getKeyStroke(int,int)。后者需要虚拟密钥代码,而不是unicode字符。
因为(int)'扩展到int 115与VK_F4的巧合,它完全按照你的要求去做:用VK_F4创建一个键绑定并屏蔽ALT。
基本上发生的事情是,你想要为char'创建一个键绑定,但是编译器选择为int 115创建一个键绑定。这是一个简单的假设错误一个不存在的重载,但编译器会替换兼容的,语义不同的重载。