比如鼠标按在一个label上时候,label会跟着鼠标光标一起移动,是在mousepressed里写吗?
我试了下,坐标老会搞混掉
public class Bird extends JLabel implements MouseListener {        //public void mousePressed(MouseEvent e) {
       Point pointBird=this.getLocation;
       Point pointMouse=e.getLocation;
      
       if(pointBird.distance(507.0, 360.0)<100.0) {  
           this.setLocation(pointMouse);
       }
   }
}
               
    结果pointBird得到的是窗口里的坐标,pointMouse得到的是label中的坐标(差别很大),而且if语句执行一次就不执行了,就是说label就动了一下,不是跟着动的,小弟请教大家哦!!!最好贴下思路代码

解决方案 »

  1.   

    你的接口选错了,应该是:MouseMotionListener。
    他需要重写两个方法,其中mouseMoved()方法中,是当你移动鼠标是,需要做什么事;mouseDragged()方法中,是当你拖动鼠标是,做什么事。具体形式是下面。public class Bird extends JLabel implements MouseListener {  //....
    public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub

    }public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub

    }}
      

  2.   


    package com.yangxiutian;import java.awt.Font;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionListener;import javax.swing.JFrame;
    import javax.swing.JLabel;public class Test1 extends JFrame{
        
    private static final long serialVersionUID = -2902215570723051966L;
    {
    this.setBounds(400, 300, 400, 200);
    this.setLayout(null);
    this.setVisible(true);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    final JLabel label=new JLabel("日本滚出钓鱼岛!");
    label.setSize(300, 30);
    label.setFont(new Font("华文彩云",Font.ITALIC,30));
    this.addMouseMotionListener(new MouseMotionListener() {

    @Override
    public void mouseMoved(MouseEvent e) {
    // TODO Auto-generated method stub
    label.setLocation(e.getX(), e.getY());
    }

    @Override
    public void mouseDragged(MouseEvent e) {
    // TODO Auto-generated method stub

    }
    });
    this.add(label); 

    }
    public static void main(String[] args) {
    new Test1();
    }}
      

  3.   

    通常需要MouseListener跟MouseMotionListener两个接口
    其中mousePressed方法中记录下最初的坐标,mouseReleased记录最终坐标
    而mouseDragged根据变化来改变坐标