Arrastar e Soltar componentes

como faço para clicar em um componente por exemplo um botao e arrastar onde eu quero dentro de um form??

em tempo de execuçao…o usuario escolhe onde quer posicionar o JButton na tela

consigo fazer isso no netbeans??

Essa técnica é chamada ‘drag and drop’. Tem como fazer, mas eu não sei como. Talvez isso ajude: http://java.sun.com/docs/books/tutorial/uiswing/dnd/index.html

vc pode pegar o evento onmousedown e colocar na posição do componente clicado as mesma cordenadss do mouse, e isso poderia ser interrompido no evento onmouseup.

mas eu consigo fazer o componente andar junto com o mouse…conforme eu arrasto…teria como me mostrar algum exemplo em codigo??

1 curtida

É algo assim que você quer:

import java.awt.EventQueue;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;

import javax.swing.JButton;
import javax.swing.JFrame;

public class DragButtonDemo extends JFrame {

	private static final long serialVersionUID = 1L;
	private JButton botao;

	public DragButtonDemo() {
		super();
		setTitle("Drag & Drop Demo");
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);
		setLayout(null);
		botao = new JButton("Arraste-me!");
		botao.setBounds(50, 50, 150, 30);
		botao.addMouseMotionListener(new Controler());
		add(botao);
		setSize(500, 500);
		setVisible(true);
	}

	private class Controler extends MouseMotionAdapter {

		@Override
		public void mouseDragged(MouseEvent e) {
			botao.setLocation(botao.getX() + e.getX(), botao.getY() + e.getY());
		}

	}

	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {

			@Override
			public void run() {
				new DragButtonDemo();
			}

		});
	}

}

vlw isso mesmo que eu precisava…vou dar uma estudada no codigo e implementar coisas novas :lol:

como por exemplo adicionar varios JButtons com um botao adicionar vou ter q pensar um poko ainda^^

Sei q o topico é antigo, massss… fiz umas pequenas modificações para que quando o usuário clique no botão ele não de um salto como no exemplo anterior.

Abraços galera…


import java.awt.EventQueue;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import javax.swing.JButton;
import javax.swing.JFrame;

public class NewMain extends JFrame {

    private static final long serialVersionUID = 1L;
    private JButton botao;
    private int x;
    private int y;

    public NewMain() {
        super();
        setTitle("Drag & Drop Demo");
        setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        setLayout(null);
        botao = new JButton("Arraste-me!");
        botao.setBounds(50, 50, 150, 30);
        botao.addMouseMotionListener(new Controler());
        botao.addMouseListener(new MListener());
        add(botao);
        setSize(500, 500);
        setVisible(true);
    }

    private class Controler extends MouseMotionAdapter {

        @Override
        public void mouseDragged(MouseEvent e) {
            if (e.getX() - x == 0 || e.getX() - x == 0) {
                x = e.getX();
            }
            if (e.getY() - y == 0 || e.getY() - y == 0) {
                y = e.getY();
            }
            botao.setLocation(botao.getX() + (e.getX() - x), botao.getY() + (e.getY() - y));
        }
    }

    private class MListener extends MouseAdapter {

        @Override
        public void mousePressed(MouseEvent e) {
            x = e.getX();
            y = e.getY();
        }
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new NewMain();
            }
        });
    }
}