JAVA中关于鼠标事件的问题
使用BUTTON3_DOWN_MASK检测鼠标右键的状态if((event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!...
使用BUTTON3_DOWN_MASK检测鼠标右键的状态
if((event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0)
...//code for right click
我想问的是,在这里的&是做的逻辑运算还是位运算?
如果是位运算的话,那第一个方法比如返回一个0101,第二个参数等于0100,那么他们进行&运算以后,结果是0100,也就是!=0,但是他们的值却不同,代表的就不是一个键吧?那这里是怎么考虑的呢?
楼下的两位的答案完全不同
在这里如果是改成event.getModifiersEx()==InputEvent.BUTTON3_DOWN_MASK来判断按下的是否是右键,我就能理解,但是API里写最好写成上面那种方式,期待更详细的解答 展开
if((event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0)
...//code for right click
我想问的是,在这里的&是做的逻辑运算还是位运算?
如果是位运算的话,那第一个方法比如返回一个0101,第二个参数等于0100,那么他们进行&运算以后,结果是0100,也就是!=0,但是他们的值却不同,代表的就不是一个键吧?那这里是怎么考虑的呢?
楼下的两位的答案完全不同
在这里如果是改成event.getModifiersEx()==InputEvent.BUTTON3_DOWN_MASK来判断按下的是否是右键,我就能理解,但是API里写最好写成上面那种方式,期待更详细的解答 展开
5个回答
展开全部
肯定是位运算符,为什么API里说可以把控制键使用位运算符来操作的原因,我给你作个例子,你就会明白了。
在JAVA中控制键(就是ctrl, alt等,当然你这里的这个也是这个范围内的)是用某一个字节中的位来表示的,我们假设在java使用一个字节(8位)来表过这些控制键。比如这一个字节的第1位表示ctrl,第2位表示alt...最后一位表示BUTTON3_DOWN_MASK,那么当按下ctrl第1位会被置于1,按下alt最后一位会被置于1,如果按下鼠标右见,则最后一位被置于1。因此常量BUTTON3_DOWN_MASK在这个字节中的表示就是0000 0001。如果是这样的话,我们来看你的if语句。
event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK ,这样就很明白了。如果你按下了ctrl,也就是把这个字节的第1位置1,也就是1000 0000然后把这个数拿来与0000 0001按位与,结果为0,表示没按下鼠标右见。因此只有当你按下鼠标右见时表达式才为真,也就是才为1。整个表达式也就是(event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0没有按下鼠标右见时,条件为真。
在JAVA中控制键(就是ctrl, alt等,当然你这里的这个也是这个范围内的)是用某一个字节中的位来表示的,我们假设在java使用一个字节(8位)来表过这些控制键。比如这一个字节的第1位表示ctrl,第2位表示alt...最后一位表示BUTTON3_DOWN_MASK,那么当按下ctrl第1位会被置于1,按下alt最后一位会被置于1,如果按下鼠标右见,则最后一位被置于1。因此常量BUTTON3_DOWN_MASK在这个字节中的表示就是0000 0001。如果是这样的话,我们来看你的if语句。
event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK ,这样就很明白了。如果你按下了ctrl,也就是把这个字节的第1位置1,也就是1000 0000然后把这个数拿来与0000 0001按位与,结果为0,表示没按下鼠标右见。因此只有当你按下鼠标右见时表达式才为真,也就是才为1。整个表达式也就是(event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0没有按下鼠标右见时,条件为真。
展开全部
逻辑运算,表示event.getModifiersEx()、InputEvent.BUTTON3_DOWN_MASK这两个都发生时,执行代码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先这肯定是位运算,至于为什么((event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0)就表明是右键我没有深究过,只要会直接使用java类中的一些整形常量即可,考试时候不考,工作中也不用去考虑那么多,楼主真实细心之人!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
qi_ling2005正解。只是返回布尔值的布尔表达式而已。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
&是位逻辑运算符。这样的计算结果一定会是一个整型数。所以用来和0比对。
java里面单纯的逻辑运算符与是“&&”。
java里面单纯的逻辑运算符与是“&&”。
参考资料: http://blog.csdn.net/xiaoli_feng/archive/2007/03/09/1524976.aspx
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询