鼠标拖动逻辑

时间:2011-03-21 23:34:14

标签: java logic

以下是一些代码,可以通过拖动正确移动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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

虽然第一个示例将DXDY设置为相对于当前标签位置,但第二个示例忽略了标签当前位置的当前位置。

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

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

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