Arrastrar (drag) componentes con el ratón (Java)
¬Escrito por Ricardo F con 1 comentario
20 Sep 2006En una ocasión tuve que hacer una aplicación para crear diagramas en la que tenía que insertar componentes swing como JButton o JLabel dentro de un frame y que permitía arrastrarlos (drag) con el ratón por medio de la interfaz MouseMotionListener por toda la superfice del contenedor.
Básicamente consiste en crear unos objetos derivados de JButton o de JLabel, por ejemplo, e implementarles un MouseMotionListener. Mediante el método mouseDragged se registra la variación de coordenadas del puntero del ratón cuando se arrastra el componente y se actualiza su posición.
Es importante recordar que el panel o frame que contenga esos elementos debe tener un layout nulo y que dichos elementos deben tener unas coordenadas iniciales establecidas por el método setBounds.
Aquí va un sencillo código de ejemplo:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class DragTest {
public static void main(String[] args) {
MyWindow window = new MyWindow();
window.setVisible(true);
window.setPreferredSize(new Dimension(400,400));
window.pack();
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyWindow extends JFrame{
public MyWindow(){
super("Drag test");
Container container = getContentPane();
container.setLayout(null);
MyButton boton1 = new MyButton("Move me");
container.add(boton1);
boton1.setBounds(10, 10, 100, 30);
}
}
class MyButton extends JButton implements MouseMotionListener{
public MyButton(String text){
super.setText(text);
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) {}
}





















Hay 1 comentario. Deja el tuyo!
¬ MK2
#1740 13 November, 2006 a las 1:09 pm
Gracias por éste artículo, me ha sido de gran interés!