[英]java.awt.Robot: how to send mouse/keyboard events to a specific window? with cross-platform support?
[英]How can java.awt.Robot be made to respond to mouse drag events?
我正在编写一个类,该类将允许其他计算机上的用户控制JPanel的内容,以在共享显示系统中使用。 java.awt.Robot将允许我执行鼠标单击和键盘输入,但是它没有mouseDragged(MouseEvent evt)
方法。 我的客户端将clientMouseReleased
(和Pressed
)方法作为MouseAdapter
侦听器的一部分,如下所示:
private void clientMouseReleased(java.awt.event.MouseEvent evt)
{
try
{
switch (evt.getButton())
{
case 1:
remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON1_MASK);
break;
case 2:
remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON2_MASK);
break;
case 3:
remoteDesktop.mouseRelease(evt.getX(), evt.getY(), InputEvent.BUTTON3_MASK);
break;
}
}
catch (Exception e)
{
e.printStackTrace();
JOptionPane.showMessageDialog(this, e.getMessage());
}
}
其中remoteDesktop
是一个包含java.awt.Robot的类,它使用客户端调用的方法执行Robot.mouseMove
和Robot.mouseRelease
(或Robot.mousePress
)。 我希望能够以相同的方式编写mouseDragged
,例如:
private void clientMouseDragged(java.awt.event.MouseEvent evt)
{
try
{
switch (evt.getButton())
{
case 1:
remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON1_MASK);
break;
case 2:
remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON2_MASK);
break;
case 3:
remoteDesktop.mouseDragged(evt.getX(), evt.getY(), InputEvent.BUTTON3_MASK);
break;
}
}
catch (Exception e)
{
e.printStackTrace();
JOptionPane.showMessageDialog(this, e.getMessage());
}
}
好吧,高级的想法是您需要在程序中添加鼠标状态。
您的remoteDesktop
将需要保留鼠标的状态。
private boolean mouseDown = false;
然后,在按下鼠标并释放操作时,您需要适当地设置标志。
然后,您需要在鼠标移动代码中添加逻辑。
if (mouseDown)
handelDrag();
else
handleMove();
那是我将如何处理的一般想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.