下面是一些代碼,它使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