Drag and drop

1 resposta
C

Pessoal,

Estou fazendo um trabalho de faculdade e nele preciso fazer com que seja possivel mover componentes em um container, arrastando e soltando. Tentei fazer da maneira abaixo mas não ficou muito bom o movimento do componente. Alguém sabe o que posso fazer para melhorar. Basta compilar e executar:

import java.awt.<em>;

import java.awt.event.</em>;

import javax.swing.*;

public class TestDragDrop extends JFrame

{

private MyComponent c;

private Label l1, l2;

private Panel p;

private int x,y;
public TestDragDrop()

{

this.setSize(605,405);

this.getContentPane().setLayout(null);
c = new MyComponent(Color.white);
  c.addMouseMotionListener(new ComponentMotionAdapter());
  c.setBounds(x,y,100,20);

  p = new Panel();
  p.setBackground(new Color(102,102,0));
  p.setLayout(null);
  p.setBounds(02,02,600,402);
  p.add(c);
  p.addMouseMotionListener(new ContainerMotionAdapter());

  l1 = new Label("Localizacao do Mouse no container");
  l1.setBounds(02,350,100,20);
  p.add(l1);

  l2 = new Label("Localizacao do Mouse no componente");
  l1.setBounds(02,380,100,20);
  p.add(l2);

  this.getContentPane().add(p);
  this.setVisible(true);
}

private class ContainerMotionAdapter extends MouseMotionAdapter
{
    public void mouseMoved(final MouseEvent e)
    {
        l1.setText("Container: (" + e.getX() + "," + e.getY() + ")");
    }
}

private class ComponentMotionAdapter extends MouseMotionAdapter
{
     public void mouseDragged(MouseEvent e)
     {
         updateLocation(e);
     }
    
     public void mouseReleased(MouseEvent e)
     {
        //updateLocation(e);
     }

     void updateLocation(MouseEvent e)
     {
        c.setLocation(e.getX(),e.getY());
        repaint();
     }

     public void mouseMoved(final MouseEvent e)
     {
        l2.setText("Component: (" + e.getX() + "," + e.getY() + ")");
     }

     public void redispatchEvent(final MouseEvent e)
     {
         final Component origin = e.getComponent();
         e.setSource(origin.getParent());
         e.translatePoint(origin.getX(), origin.getY());
         origin.getParent().dispatchEvent(e);
     }

}
public static void main(String[] args)
{
   TestDragDrop ec = new TestDragDrop();
   ec.show();
}

}

class MyComponent extends Component

{

MyComponent(final Color c)

{

setForeground©;

}
public void paint(final Graphics g)
{
    g.setColor(getForeground());
    g.fillRect(0, 0, getWidth(), getHeight());
}

public Dimension getPreferredSize()
{
    return new Dimension(100, 50);
}

public boolean isOpaque()
{
    return true;
}

}

1 Resposta

J

Utilize codigo

Criado 8 de novembro de 2006
Ultima resposta 8 de nov. de 2006
Respostas 1
Participantes 2