2016-08-08 34 views
1

拖动鼠标的对象开始,当我拖动鼠标在不同位置的对象开始,当我在不同位置

我想要开始两个鼠标位置和对象位置ceter具有相同的位置 起动。

我尝试了一些方法,并不能在谷歌找到解决方案。 所以我提出了问题。

package math; 

import java.awt.event.MouseAdapter; 
import java.awt.event.MouseEvent; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JOptionPane; 

public class movingButton extends JFrame { 

    private JButton button; 

    public movingButton() { 
     super("Position helper"); 
     super.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     super.setSize(500, 520); 
     super.setVisible(true); 
     super.setLayout(null); 
     button = new JButton("drag me "); 
     add(button); 
     button.setBounds(100, 100, 150, 40); 


     button.addMouseMotionListener(new MouseAdapter() { 

      public void mouseDragged(MouseEvent E) { 

       int X = E.getX() + button.getX(); 
       int Y = E.getY() + button.getY(); 
       button.setBounds(X, Y, 150, 40); 

      } 
     }); 
    } 


} 



public class Main { 

    public static void main(String args[]) { 

     new movingButton(); 


    } 

} 

回答

3

您需要从按钮的新X和Y位置减去点击按钮的位置。您可以通过将MouseListenermousePressed方法添加到您的按钮来获得这些。我认为如果您创建一个从MouseAdapter扩展到两种方法的新类,它会变得更容易。

public movingButton() { 

    [...] 

    MouseAdapter myMouseAdapter = new MouseAdapter(){ 
     int mouseClickedPosX = 0; 
     int mouseClickedPosY = 0; 

     @Override 
     public void mousePressed(MouseEvent E){ 
      mouseClickedPosX = E.getX(); 
      mouseClickedPosY = E.getY(); 
     } 
     @Override 
     public void mouseDragged(MouseEvent E){ 
      int X = E.getX() + button.getX() - mouseClickedPosX; 
      int Y = E.getY() + button.getY() - mouseClickedPosY; 
      button.setBounds(X, Y,150,40); 
     } 
    }; 

    button.addMouseListener(myMouseAdapter); 
    button.addMouseMotionListener(myMouseAdapter); 
} 
+0

非常感谢你ArcticLord – user3662974