style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">

Arrastrar JButton de un JPanel a otro.

Hola un saludo a todos, espero puedan ayudarme con algunos tips, en fin... Explico mi problema.

Como dice el título del tema, deseo arrastrar un componente (en este caso un JButton) de un JPanel a otro, he logrado mover el botón mediante la función setLocation() y mouseDragged(), sin embargo no tengo ni la menor idea de como hacerle para que cuando arrastre el botón desde el "Panel1" al "Panel2" éste se quede en el "panel2". Lo único que tengo hasta ahora es la capacidad de arrastrar el botón a mi voluntad pero solo dentro del rango del "JPanel1" porque cuando sale del rango del "panel1" (es decir... Al JFrame) simplemente no se ve. He estado leyendo algo de documentación y tutoriales en inglés pero simplemente no capto la idea. Bueno, aquí les dejo el código.

import java.awt.Color;
import java.awt.Container;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Prueba{

    class Ventana extends JFrame{

        JPanel panel1 = new JPanel();
        JPanel panel2 = new JPanel();
       
        public Ventana(){
                       
            Container container = getContentPane();
            container.setLayout(null);            
            Boton boton1 = new Boton("Mueveme");

            panel1.setBorder(BorderFactory.createLineBorder(Color.black));
            panel1.setBounds(10, 10, 100, 100);            
            panel1.add(boton1);    
           
            panel2.setBorder(BorderFactory.createLineBorder(Color.black));
            panel2.setBounds(270, 260, 100, 100);              
                     
            container.add(panel1);
            container.add(panel2);
           
        }
    }    

    class Boton extends JButton implements MouseMotionListener{    
       
        public Boton(String mensaje){

            super.setText(mensaje);            
            addMouseMotionListener(this);
        }

        public void mouseDragged(MouseEvent mme){          
           
            setLocation(this.getX() + mme.getX() - this.getWidth() / 2,this.getY() + mme.getY() - this.getHeight() / 2);              
         
        }  

        public void mouseMoved(MouseEvent mme) {}

   
    }
   
    public void correr(){        

        Ventana window = new Ventana();        
        window.setVisible(true);            
        window.setSize(400, 400);
        window.setDefaultCloseOperation(window.EXIT_ON_CLOSE);        
    }

    public static void main(String[] args) {

        Prueba drag = new Prueba();      
        drag.correr();
    }
}

Quisiera poder lograr ese cometido ya que tengo algunas ideas de programas donde me gustaría implementarlo.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Existe un API de Drag and

Existe un API de Drag and Drop

No la conozco bien pero seguramente podrás encontrar algo más sofisticado ahí:

http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html

No olvides postear tus hallazgos.

Imagen de Leonardo

Muchas gracias

Gracias por tu atención, lo checaré más a fondo, hasta ahora tuve tiempo de entrar al foro para ver si habían respondido, un saludo.

style="display:inline-block;width:728px;height:90px"
data-ad-client="ca-pub-5164839828746352"
data-ad-slot="7563230308">