将图片添加到JLabel上,然后拖动JLabel在面板上移动,能捕获它移动后的坐标(即jLabel移动后新的坐标),怎样才能将新获得的这个坐标记录下来,将来以便在其他地方调用。希望赐教,不胜感激。
下面是代码,已经实现移动和得到新的坐标。/**
 * @(#)ImageMove.java
 *
 *
 * @author 
 * @version 1.00 2009/10/14
 */import java.awt.Color;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.net.URL;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;public class ImageMove {
  static Point p; //Jlabel随鼠标移动后的坐标
      static int x,y;
      public static void main(String[] args) throws Exception{
         //int x,y;
          JFrame f = new JFrame();
          f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          f.getContentPane().setLayout(null);
          f.setBounds(0,0,400,400);
          Icon icon = new ImageIcon(new URL("http://img.baidu.com/img/logo-zhidao.gif"));
          JLabel l = new JLabel(icon);
          l.setSize(icon.getIconWidth(),icon.getIconHeight());
          l.setBorder(BorderFactory.createLineBorder(Color.red));
          f.getContentPane().add(l);
          f.setVisible(true);
             
          l.addMouseListener(new MouseAdapter(){
               public void mousePressed(MouseEvent e){
                x = e.getX();
                y = e.getY();
              }
          });
          
          l.addMouseListener(new MouseAdapter(){
             public void mouseReleased(MouseEvent e){
                 JLabel l = (JLabel)e.getSource();
                 p = new Point(l.getLocation()) ;//这里获取到Jlabel新的坐标点
                 System.out.println (p);
             }
          });
         
          l.addMouseMotionListener(new MouseMotionListener(){
               public void mouseDragged(MouseEvent e) {
                   JLabel l = (JLabel)e.getSource();
                   l.setLocation(l.getX()+ e.getX()-x,l.getY()+ e.getY()-y);
                }      
               public void mouseMoved(MouseEvent e) {
                   throw new UnsupportedOperationException("Not supported yet.");
               }
               });     
      }  
       //System.out.println (p);
       //想要在这里能获得移动Jlabel后鼠标释放后的坐标,以便将来在其他程序里能调用这个坐标值
       //但是这里的p值输出不出来
 } 

解决方案 »

  1.   

    看看MouseMotionListener这个接口
    里面有    public void mouseDragged(MouseEvent e) {
            //e.getX(),e.getY()就能拿到拖动到的位置了
         }
      

  2.   


    l.addMouseListener(new MouseAdapter() {
    public void mouseReleased(MouseEvent e){
    JLabel l = (JLabel) e.getSource();
    p = new Point(l.getLocation());// 这里获取到Jlabel新的坐标点
    x = p.x;//得到移动后的x坐标
    y = p.y;//得到移动后的y坐标
    System.out.println(p);
    }
    });
      

  3.   

    你的打印语句放错地方了
    要放到main方法里System.out.println("x is :"+ImageMove.x + " y is :"+ImageMove.y);
      

  4.   

       不行啊 放到Main里输出的是 0,0
      

  5.   

    放到main里当然是0,0的啊
    你的mouse都没有动一开始.
      

  6.   


        实现implements MouseListener public void mouseClicked(MouseEvent e) {
    //打印x、y坐标
    System.out.println(e.getX());
    System.out.println(e.getY());
    }
      

  7.   

    其实我的意思是这样的 
       有一个add(int x ,int y){}方法;
       在这个main函数里调用add方法,里面传的参数是新获得的坐标点的值
      

  8.   

    再说明白点 我的程序是这样 我做了个图片移动的函数int xPoint;
    int yPoint;//移动图片是鼠标在JLabel上的坐标;
    private  void move(String tObject,int x,int y){
           int w = tObject.indexOf("[");
           String componentClass = tObject.substring(0,w);
                String tPath = "d:\\" + componentClass + ".png";
                File tfile = new File(tPath);
           try{
                 Image tImage = ImageIO.read(tfile);
                 Icon icon = new ImageIcon(tImage);
                 JLabel I = new JLabel(icon);
                 I.setSize(icon.getIconWidth(),icon.getIconHeight());
                 I.setBounds(x,y,icon.getIconWidth(),icon.getIconHeight());
                 jPanel1.add(I);
                 I.setVisible(true);    I.addMouseListener(new MouseAdapter(){
                @Override
             public void mousePressed(MouseEvent e){
               xPoint = e.getX();
               yPoint = e.getY();
            }
        });    I.addMouseListener(new MouseAdapter(){
                    @Override
             public void mouseReleased(MouseEvent e){
                  JLabel I = (JLabel)e.getSource();
                  I.getLocation();   
             }
        });
        I.addMouseMotionListener(new MouseMotionListener(){
           public void mouseDragged(MouseEvent e) {
                 JLabel I = (JLabel)e.getSource();
                 I.setLocation(I.getX()+e.getX()-xPoint,I.getY()+e.getY()-yPoint);
              }      public void mouseMoved(MouseEvent e) {
                  throw new UnsupportedOperationException("Not supported yet.");
                }
            });
        }catch(Exception e){
          }       
                //add(新的坐标点);怎样将鼠标释放后新获得的坐标点传到里面去
    }
      

  9.   

    为什么要在main方法里调用add这个方法呢?/**
     * @(#)ImageMove.java
     *
     *
     * @author 
     * @version 1.00 2009/10/14
     */import java.awt.Color;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import java.awt.event.MouseMotionListener;
    import java.net.URL;
    import javax.swing.BorderFactory;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;public class ImageMove {
          static Point p; //Jlabel随鼠标移动后的坐标
          static int x,y;
          public static void main(String[] args) throws Exception{
                //int x,y;
              JFrame f = new JFrame();
              f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              f.getContentPane().setLayout(null);
              f.setBounds(0,0,400,400);
              Icon icon = new ImageIcon(new URL("http://img.baidu.com/img/logo-zhidao.gif"));
              JLabel l = new JLabel(icon);
              l.setSize(icon.getIconWidth(),icon.getIconHeight());
              l.setBorder(BorderFactory.createLineBorder(Color.red));
              f.getContentPane().add(l);
              f.setVisible(true);
                 
              l.addMouseListener(new MouseAdapter(){
                      public void mousePressed(MouseEvent e){
                    x = e.getX();
                    y = e.getY();
                  }
              });
              
              l.addMouseListener(new MouseAdapter(){
                    public void mouseReleased(MouseEvent e){
                           JLabel l = (JLabel)e.getSource();
                           p = new Point(l.getLocation()) ;//这里获取到Jlabel新的坐标点
                           new ImageMove().add(p.x, p.y); //这里不是把参数传出去了吗?
                    }
              });
             
              l.addMouseMotionListener(new MouseMotionListener(){
                   public void mouseDragged(MouseEvent e) {
                       JLabel l = (JLabel)e.getSource();
                       l.setLocation(l.getX()+ e.getX()-x,l.getY()+ e.getY()-y);
                    }      
                   public void mouseMoved(MouseEvent e) {
                         // throw new UnsupportedOperationException("Not supported yet.");
                   }
                   });     
          }  
          
          //你的add function
          public void add(int x,int y) {
            System.out.println("(" + x + "," + y + ")");
          }
          
              //System.out.println (p);
              //想要在这里能获得移动Jlabel后鼠标释放后的坐标,以便将来在其他程序里能调用这个坐标值
              //但是这里的p值输出不出来
     }
      

  10.   

      可能我没说明白int xPoint;
    int yPoint;//移动图片是鼠标在JLabel上的坐标;
    private  void move(String tObjName,int x,int y){
           removeHashMapByKey(tObjName);
           System.out.println(LeftTopHashMap.size());
           int w = tObjName.indexOf("[");
           String componentClass = tObjName.substring(0,w);
                String tPath = "d:\\" + componentClass + ".png";
                File tfile = new File(tPath);
           try{
                 Image tImage = ImageIO.read(tfile);
                 Icon icon = new ImageIcon(tImage);
                 JLabel I = new JLabel(icon);
                 I.setSize(icon.getIconWidth(),icon.getIconHeight());
                 I.setBounds(x,y,icon.getIconWidth(),icon.getIconHeight());
                 jPanel1.add(I);
                 I.setVisible(true);    I.addMouseListener(new MouseAdapter(){
                @Override
             public void mousePressed(MouseEvent e){
               xPoint = e.getX();
               yPoint = e.getY();
            }
        });    I.addMouseListener(new MouseAdapter(){
                    @Override
             public void mouseReleased(MouseEvent e){
                  JLabel I = (JLabel)e.getSource();
                  int x = (int)I.getLocation().getX();// 相当于m  
                  int y = (int)I.getLocation().getY();// 相当于n  看最后面的draw函数就明白了
                  jPanel1.remove(I);
             }
        });
        I.addMouseMotionListener(new MouseMotionListener(){
           public void mouseDragged(MouseEvent e) {
                 JLabel I = (JLabel)e.getSource();
                 I.setLocation(I.getX()+e.getX()-xPoint,I.getY()+e.getY()-yPoint);
              }      public void mouseMoved(MouseEvent e) {
                  throw new UnsupportedOperationException("Not supported yet.");
                }
            });
        }catch(Exception e){
          }       
          drawpIC(tObject,m,n);// 这里想要传入心获得的坐标m , n    
    }