简体   繁体   English

如何使java.awt.Robot响应鼠标拖动事件?

[英]How can java.awt.Robot be made to respond to mouse drag events?

I'm writing a class that will allow users on other computers to control the contents of a JPanel, for use in a shared display system. 我正在编写一个类,该类将允许其他计算机上的用户控制JPanel的内容,以在共享显示系统中使用。 java.awt.Robot will allow me to perform mouse clicks and keyboard input, but it does not have a mouseDragged(MouseEvent evt) method. java.awt.Robot将允许我执行鼠标单击和键盘输入,但是它没有mouseDragged(MouseEvent evt)方法。 My client has clientMouseReleased (and Pressed ) methods as part of a MouseAdapter listener that look like: 我的客户端将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());
    }
}

Where the remoteDesktop is a class containing a java.awt.Robot, and it executes a Robot.mouseMove and Robot.mouseRelease (or Robot.mousePress ) in the method the client calls. 其中remoteDesktop是一个包含java.awt.Robot的类,它使用客户端调用的方法执行Robot.mouseMoveRobot.mouseRelease (或Robot.mousePress )。 I'd like to be able to write the mouseDragged in the same way, ie, like this: 我希望能够以相同的方式编写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());
    }
}

Well, the high level idea is that you need to add mouse state to your program. 好吧,高级的想法是您需要在程序中添加鼠标状态。

Your remoteDesktop will need to keep the state of the mouse. 您的remoteDesktop将需要保留鼠标的状态。

private boolean mouseDown = false;

Then, on mouse press and release actions you need to set the flag appropriately. 然后,在按下鼠标并释放操作时,您需要适当地设置标志。

Then, you need to add logic in the mouse move code. 然后,您需要在鼠标移动代码中添加逻辑。

if (mouseDown) 
    handelDrag();
else 
    handleMove();

That's the general idea of how I would go about it. 那是我将如何处理的一般想法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM