[英]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.