2011-03-21 78 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