改如何实现像在flash中button的拖拽功能?要以什么作为按钮的容器?

解决方案 »

  1.   

    没做过,但是可以提供思路(做过关于Panel的例子)1.产生一个BUTTON2.面板注册鼠标拖拽事件3.对比现有BUTTON和鼠标位置,并进行判断。4.if(true),则删除原来的BUTTON,把现在的BUTTON加到面板上。else则不动
      

  2.   

    import java.awt.FlowLayout;
    import java.awt.Point;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;import javax.swing.JButton;
    import javax.swing.JFrame;public class DragButtonTest extends JFrame {    private JButton dragBtn;    public DragButtonTest() {
            this.initComponent();
            this.getContentPane().setLayout(new FlowLayout());
            this.getContentPane().add(this.dragBtn);
        }    private void initComponent() {
            if (this.dragBtn == null) {
                this.dragBtn = new JButton("dragBtn");
                this.dragBtn.addMouseListener(new MouseAdapter() {
                    private Point oldPoint = new Point();                @Override
                    public void mousePressed(MouseEvent e) {
                        this.oldPoint.x = e.getX();
                        this.oldPoint.y = e.getY();
                    }                @Override
                    public void mouseReleased(MouseEvent e) {
                        if (this.oldPoint.x != e.getX() || this.oldPoint.y != e.getY()) {
                            DragButtonTest.this.dragBtn.setLocation(new Point(
                                DragButtonTest.this.dragBtn.getLocation().x
                                    + e.getX()
                                    - this.oldPoint.y,
                                DragButtonTest.this.dragBtn.getLocation().y
                                    + e.getY()
                                    - this.oldPoint.y));
                            this.oldPoint.x = e.getX();
                            this.oldPoint.y = e.getY();
                            DragButtonTest.this.repaint();
                        }
                    }                @Override
                    public void mouseDragged(MouseEvent e) {                }
                });
            }
        }    /**
         * @param args
         */
        public static void main(String[] args) {
            DragButtonTest dbt = new DragButtonTest();
            dbt.setVisible(true);
            dbt.setSize(300, 300);
            dbt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }}如果想让按钮跟着鼠标走,那么应该将逻辑放到mouseDragged中,不过这样性能会差一些
      

  3.   

    行,按照你的代码可以实现拖动了,可是我把mouseReleased中的内容拷到mouseDragged里面,为什么不能实现让按钮跟着鼠标走?而且好像无论把什么内容加到mouseDragged中都没有作用
      

  4.   

    import java.awt.FlowLayout; 
    import java.awt.Point; 
    import java.awt.event.MouseAdapter; 
    import java.awt.event.MouseEvent; import javax.swing.JButton; 
    import javax.swing.JFrame; public class DragButtonTest extends JFrame {     private JButton dragBtn;     public DragButtonTest() { 
            this.initComponent(); 
            this.getContentPane().setLayout(new FlowLayout()); 
            this.getContentPane().add(this.dragBtn); 
        }     private void initComponent() { 
            if (this.dragBtn == null) { 
                this.dragBtn = new JButton("dragBtn"); 
                
                this.dragBtn.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() { 
                    private Point oldPoint = new Point(); 
                    
                    @Override 
                    public void mouseDragged(MouseEvent e) {
                     if (e.getX() - this.oldPoint.x >= 5 || e.getY() - this.oldPoint.y >= 5
                     || e.getX() - this.oldPoint.x <= -5 || e.getY() - this.oldPoint.y <= -5){ 
                     DragButtonTest.this.dragBtn.setLocation(new Point( 
                     DragButtonTest.this.dragBtn.getLocation().x 
                     + e.getX() 
                    - this.oldPoint.x, 
                               DragButtonTest.this.dragBtn.getLocation().y 
                                + e.getY() 
                                - this.oldPoint.y)); 
            
                    DragButtonTest.this.repaint(); 
                    } 
                    System.out.println("HELLO");
                    } 
                   }
               ); 
            } 
        }     /** 
        * @param args 
        */ 
        public static void main(String[] args) { 
            DragButtonTest dbt = new DragButtonTest(); 
            dbt.setVisible(true); 
            dbt.setSize(300, 300); 
            dbt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
        } } 
    可实现连续拖拽