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

发布于 2024-09-15 23:41:30 字数 1837 浏览 3 评论 0原文

我正在编写一个类,允许其他计算机上的用户控制 JPanel 的内容,以便在共享显示系统中使用。 java.awt.Robot 将允许我执行鼠标单击和键盘输入,但它没有 mouseDragged(MouseEvent evt) 方法。 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());
    }
}

我的客户端有 clientMouseReleased (和 Pressed)方法作为是一个包含 java.awt.Robot 的类,它执行 Robot.mouseMoveRobot.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());
    }
}

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. java.awt.Robot will allow me to perform mouse clicks and keyboard input, but it does not have a mouseDragged(MouseEvent evt) method. My client has clientMouseReleased (and Pressed) methods as part of a MouseAdapter listener that look like:

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. I'd like to be able to write the mouseDragged in the same way, i.e., like this:

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());
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

壹場煙雨 2024-09-22 23:41:30

嗯,高层次的想法是您需要将鼠标状态添加到您的程序中。

您的remoteDesktop将需要保持鼠标的状态。

private boolean mouseDown = false;

然后,在按下和释放鼠标操作时,您需要适当地设置标志。

然后,您需要在鼠标移动代码中添加逻辑。

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

这就是我将如何去做的总体想法。

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.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文