java - 当我拖动鼠标时,对象从不同的位置开始

标签 java mouselistener

<分区>

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

我想开始鼠标位置和对象中心位置具有相同的位置 开始。

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

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();


     }

 }

最佳答案

您需要从按钮的新 X 和 Y 位置减去按钮被点击的位置。您可以通过将带有 mousePressed 方法的 MouseListener 添加到您的按钮来获得这些。我认为,如果您创建一个从 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);
}

关于java - 当我拖动鼠标时,对象从不同的位置开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38825385/

相关文章:

java - 可迭代到 ArrayList 元素更改

java - 列出 AlarmManager 中的所有 PendingIntents

java - 获取 JScrollPane 中包含的 JList

java - 获取单击 ImageIcon 的 X 和 Y,Java

java - 如何同步java事件中更新的值

java - 我的递归方法无法正确返回 char 出现的总数

java - 使用Windows命令行在java中编译带有包的程序

java - 部署war到JBOSS

java - 最终局部变量无法赋值

java - 在Java中改变RGB颜色