如何在不覆盖实际鼠标的情况下鼠标单击任何java组件

时间:2016-07-22 13:56:56

标签: java swing autoit

目前,为了模拟我的应用程序中的鼠标点击,我使用了Java的Robot类。它似乎使用桌面作为边界/网格来了解Point在屏幕上的位置。

示例:

<div id="dialog-addResource" title="Add Resource" style="display:none">
    <span>Add Resource: </span>
    <input type="text" id="resourceFile" name="file" />
    <input type="hidden" id="resource_id" name="resource_id" />
    <input type="hidden" name="page_id" value="{{ id }}" />
</div>

目标:

机器人强制使用我的鼠标/光标,我希望能够在我的计算机上执行其他操作,而此代码只运行我编程的Java应用程序。

有没有办法用JNA做到这一点?我不关心支持Windows之外的任何操作系统,但由于传统技术,仍然需要成为Java应用程序。

1 个答案:

答案 0 :(得分:2)

以下代码点击target组件(x,y)相对于target

private static void click(Component target, int x, int y)
{
   MouseEvent press, release, click;
   Point point;
   long time;

   point = new Point(x, y);

   SwingUtilities.convertPointToScreen(point, target);

   time    = System.currentTimeMillis();
   press   = new MouseEvent(target, MouseEvent.MOUSE_PRESSED,  time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1);
   release = new MouseEvent(target, MouseEvent.MOUSE_RELEASED, time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1);
   click   = new MouseEvent(target, MouseEvent.MOUSE_CLICKED,  time, 0, x, y, point.x, point.y, 1, false, MouseEvent.BUTTON1);

   target.dispatchEvent(press);
   target.dispatchEvent(release);
   target.dispatchEvent(click);
}