下面是一些代码,它使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
和集基于来自我原来的位置的不同其位置在第一种情况下,和在第二种情况下我移动原基于与我原来的位置不同的对象。
谢谢。但我认为,实际上当我拖动鼠标时,我不会调用'move(0,0)';我恰恰调用了我的新“x,y”位置和我原来的**之间的区别。所以,当“移动”方法与设置位置相似时,它对我来说没有意义,为什么它不移动对象的位置。 – Steven 2011-03-21 23:56:31
@Steven我怕你错了。你计算DX为'DX = -e.getX();',然后你用'e.getX()+ DX'调用'move()',这是'e.getX()-e.getX()' ,这是零。就像我为你复制的代码所显示的那样,'move()'与'setLocation()'并不相似,它在不同的名字下完全一样。 – biziclop 2011-03-22 00:04:12
这是否正确:当我按下鼠标时,它记录了我的鼠标位置的初始值(当然是负值)。当我拖动鼠标,它为DX和DY保留相同的初始值,并将它们添加到新的e.getX()等...所以我不应该移动一些非零值?我的想法是,如果你在这里是正确的,那么第一个例子的逻辑将改变什么。看来我在这两种情况下都使用相同的逻辑。 – Steven 2011-03-22 00:07:45