if (event.getModifiersEx() & (onmask | offmask) == onmask) {
...
}
我觉的这个程序写的还是有点技巧性的。
不知道你有没有看InputEvent类的源代码?
在源代码中,是这样定义这些按键事件的常量的:
public static final int SHIFT_DOWN_MASK = 1 << 6;
public static final int BUTTON1_DOWN_MASK = 1 << 10;
public static final int CTRL_DOWN_MASK = 1 << 7;
现在你该能理解了吧!
SHIFT_DOWN_MASK = 1 000 000
BUTTON1_MASK =10 000 000 000
CTRL_DOWN_MASK = 10 000 000
在源代码中,本身这些常量值的定义就很有技巧了。
建议你可以看看《Swing编程指南》,或者《JAVA核心技术》
显然 int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK=10001000000
而 onmask | offmask=10011000000
注意观察这个值,其实这个值完全把3个键盘事件的组合都包含进去了,对它进行逻辑运算,可以轻松获得想要的事件编号。
所以 程序中 event.getModifiersEx() & (onmask | offmask)的结果:
无非是:
10011000000
10010000000
10001000000
10000000000
11000000
10000000
1000000
很显然 组合条件int onmask = SHIFT_DOWN_MASK | BUTTON1_DOWN_MASK;
就是其中一种,可以很精确的判断出,代码看上去简洁,省去很多if...else
而且 位运算效率很高。
总体是说这是一种最佳实践,还谈不上技巧,在很多语言如 C++里 都是采用这样的编码方式。
- -! |分隔了几个整数常量 有什么不对的么 没写过C吧 那个时代这么做很常见
你把API研究的很深啦
恩,对的。