【问题标题】:How can java.awt.Robot be made to respond to mouse drag events?如何使 java.awt.Robot 响应鼠标拖动事件?
【发布时间】:2010-08-27 15:00:42
【问题描述】:

我正在编写一个类,它允许其他计算机上的用户控制 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.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());
    }
}

【问题讨论】:

    标签: java mouseevent awtrobot


    【解决方案1】:

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

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

    private boolean mouseDown = false;
    

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

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

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

    这就是我的大致思路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2016-07-08
      • 2011-01-18
      • 1970-01-01
      • 2012-01-26
      相关资源
      最近更新 更多