JAVA中关于鼠标事件的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中关于鼠标事件的问题相关的知识,希望对你有一定的参考价值。

使用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里写最好写成上面那种方式,期待更详细的解答

肯定是位运算符,为什么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没有按下鼠标右见时,条件为真。
参考技术A 逻辑运算,表示event.getModifiersEx()、InputEvent.BUTTON3_DOWN_MASK这两个都发生时,执行代码 参考技术B 首先这肯定是位运算,至于为什么((event.getModifiersEx()&InputEvent.BUTTON3_DOWN_MASK)!=0)就表明是右键我没有深究过,只要会直接使用java类中的一些整形常量即可,考试时候不考,工作中也不用去考虑那么多,楼主真实细心之人! 参考技术C qi_ling2005正解。只是返回布尔值的布尔表达式而已。 参考技术D &是位逻辑运算符。这样的计算结果一定会是一个整型数。所以用来和0比对。
java里面单纯的逻辑运算符与是“&&”。

参考资料:http://blog.csdn.net/xiaoli_feng/archive/2007/03/09/1524976.aspx

以上是关于JAVA中关于鼠标事件的问题的主要内容,如果未能解决你的问题,请参考以下文章

java中如何获取网页中鼠标点击过的事件

将多个鼠标悬停事件应用于相邻(连接)节点

JQuery 鼠标事件简介

c#如何设置panel的鼠标滑轮事件?MouseWheel只能应用于Form吗?

Java JTable 添加了一个键盘事件,和鼠标点击事件的监听,如何在我键盘事件起作用时,让鼠标事件失效

JAVA 求助 就是如何用鼠标监听事件调用Graphics 画的线条和矩形 接着画 ? 不会画完