了解Java中的Robot类

时间:2018-01-24 18:05:01

标签: java sockets

我正在浏览一个在其中实现Robot()类的代码。我不明白以下方法

$

这基本上使用java的套接字将MouseEvent发送到另一台PC。有人可以解释为什么xButton的值设置为16以及if语句中发生了什么?

2 个答案:

答案 0 :(得分:1)

好的,mea culpa,自从我使用机器人以来已经有一段时间了。因此,数字16来自InputEvent:https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/awt/event/InputEvent.java#L95 - 只是将它硬编码为16并不是非常有品味,文档建议使用这些BUTTONx_MASK字段(https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html#mousePress(int)),并且源在本地建议使用BUTTONx_DOWN_MASK(向上滚动几行)。
4更加糟糕,因为对于按钮2和3,源只是引用了Event.ALT / META_MASK,但是Event.META_MASK最终结果是4(https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/awt/Event.java#L84),所以这是右键单击被怀疑

答案 1 :(得分:0)

MouseEvent方法getButton()返回按下的按钮的编号。您可以阅读here上的更多信息。

关于此代码中发生了什么,它似乎检查是否按下鼠标右键/鼠标右键(this post解释哪个按钮对应于哪个数字),并发送int值4如果它是。如果按下的按钮不是右键单击,则它会发送int值16.

修改

实际上,在更多地看待这个问题时,我的原始答案并非100%正确。在this post上讨论的方法用于确定MouseEvent来自哪个按钮,而不是1 =左键单击,2 =中间点击,3 =右键单击之间的直接关联。我仍然认为这是基于MouseEvent是否是右键点击做出一些决定,但正如@Henry所说,没有更多背景,我无法确定