有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java鼠标拖动逻辑

下面是一些代码,可以通过拖动使GCompound正确移动

public void mouseDragged(MouseEvent e) {
    currentLabel.setLocation(e.getX()+DX, e.getY()+DY);
}
public void mousePressed(MouseEvent e) { 
    currentLabel = (coolLabel) getElementAt(e.getX(),e.getY());
    DX = currentLabel.getX()-e.getX();
    DY = currentLabel.getY()-e.getY();
    currentLabel.sendToFront();
}

在这里,它没有正确移动:

public void mouseDragged(MouseEvent e)
{
    currentLabel.move(e.getX()+DX, e.getY()+DY);
}

public void mousePressed(MouseEvent e) { 
    currentLabel = (coolLabel) getElementAt(e.getX(),e.getY());
    DX = -e.getX();
    DY = -e.getY();
    currentLabel.sendToFront();
}

有人能解释为什么会这样吗?似乎我的两个版本的代码都使用相同的思想。。。基本上,在第一种情况下,我获取原始GObject,并根据与原始位置的差异设置其位置,在第二种情况下,我根据与原始位置的差异移动原始对象


共 (2) 个答案

  1. # 1 楼答案

    move()setLocation()的一个不推荐使用的同义词

    一个不起作用,另一个不起作用的原因是您向其中输入了不同的参数。(特别是在第二种情况下,您总是调用move(0,0)。)

    来自java.awt.Component源代码的一个片段证实了这一点:

    public void setLocation(int x, int y) {
        move(x, y);
    }
    
    @Deprecated
    public void move(int x, int y) {
        synchronized(getTreeLock()) {
            setBoundsOp(ComponentPeer.SET_LOCATION);            
            setBounds(x, y, width, height);
        }
    }
    
  2. # 2 楼答案

    第一个示例将DXDY设置为相对于当前标签位置,而第二个示例忽略标签当前位置的当前位置

    例如,如果当前标签位置为(50,50),并且希望将其移动(30,30)。如果在指向(70,70)时按下鼠标(假设在标签边界内):

    在第一个示例中,DX将设置为-20,DY将设置为-20。现在,在拖动之后,新位置将是(如mouseDragged实现的)((70+30)-20,(70+30)-20)=(80,80),这是正确的

    在第二个示例中,DX和DY将设置为-70。现在,拖动后,新位置将为(100-70,100-70)=(30,30),这是错误的