怎样在Jpanel中拖动Jlabel控件?

解决方案 »

  1.   

    import java.awt.event.*;
    import javax.swing.*;
    import java.awt.*;
    public class DragLabel extends JPanel{
        private JLabel label;
        private int mx,my;
        public DragLabel(){
            label = new JLabel("drag me");
            label.setBackground(Color.RED);
            add(label);
            this.addMouseMotionListener(new DragHandler());
        }
        
        private class DragHandler implements MouseMotionListener{
            public void mouseDragged(MouseEvent e){
                int lx = label.getLocation().x;
                int ly = label.getLocation().y;
                Dimension d = label.getSize();
                if(new Rectangle(lx,ly,(int)(lx+d.getWidth()),(int)(ly+d.getWidth())).contains(e.getPoint())){
                    label.setLocation(lx-(mx-e.getX()),ly-(my-e.getY()));
                    mx = e.getX();
                    my = e.getY();
                }
            }
            
            public void mouseMoved(MouseEvent e){
                mx = e.getX();
                my = e.getY();
            }
        }
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            JFrame f = new JFrame();
            f.getContentPane().setLayout(new BorderLayout());
            f.getContentPane().add(new DragLabel(),BorderLayout.CENTER);
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.setSize(400,300);
            f.setVisible(true);
            
        }}
      

  2.   

    if(new Rectangle(lx,ly,(int)(d.getWidth()),(int)(d.getHeight())).contains(e.getPoint())){