2011-03-21 104 views
2

下面是一些代碼,它使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基於來自我原來的位置的不同其位置在第一種情況下,和在第二種情況下我移動原基於與我原來的位置不同的對象。

回答

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

謝謝。但我認爲,實際上當我拖動鼠標時,我不會調用'move(0,0)';我恰恰調用了我的新「x,y」位置和我原來的**之間的區別。所以,當「移動」方法與設置位置相似時,它對我來說沒有意義,爲什麼它不移動對象的位置。 – Steven 2011-03-21 23:56:31

+0

@Steven我怕你錯了。你計算DX爲'DX = -e.getX();',然後你用'e.getX()+ DX'調用'move()',這是'e.getX()-e.getX()' ,這是零。就像我爲你複製的代碼所顯示的那樣,'move()'與'setLocation()'並不相似,它在不同的名字下完全一樣。 – biziclop 2011-03-22 00:04:12

+0

這是否正確:當我按下鼠標時,它記錄了我的鼠標位置的初始值(當然是負值)。當我拖動鼠標,它爲DX和DY保留相同的初始值,並將它們添加到新的e.getX()等...所以我不應該移動一些非零值?我的想法是,如果你在這裏是正確的,那麼第一個例子的邏輯將改變什麼。看來我在這兩種情況下都使用相同的邏輯。 – Steven 2011-03-22 00:07:45

0

雖然第一示例設置DXDY相對到當前標籤的位置,所述第二示例會忽略標籤當前位置的當前位置。

例如,如果您當前的標籤位置是(50,50),並且您想將其移動(30,30)。如果您在指向(70,70)時按下鼠標(假設它位於標籤邊界內):

在您的第一個示例中,DX將設置爲-20,DY將設置爲-20。現在,在拖動新位置後(如mouseDragged implements)((70 + 30)-20,(70 + 30)-20)=(80,80)這是正確的。

在你的第二個例子中,DX將被設置爲-70,以及DY。現在,在拖動之後,新的位置將是(100-70,100-70)=(30,30),這是錯誤的。

+0

請注意,在第二種情況下,我不是**設置位置,我只是使用move方法移動對象**。所以是的,我應該通過(30,30)移動物體,這確實是正確的。所以這對我沒有幫助。 – Steven 2011-03-21 23:59:44

+0

@Steven,你當然是對的,我的錯誤。 – MByD 2011-03-22 00:03:56

+0

@Steven你**正在**設定位置,無論你怎麼想。 – biziclop 2011-03-22 00:06:44