|
Drag'n drop amélioré en Java avec Swing
|
Ce code sample à pour but de montrer comment créer des interface graphiques conviviales pour poser des éléments en drag'n drop dans votre application. On peut ainsi créer des application dont l'interface utilisateur est de type Microsoft Visio. Bien sur pour faire fonctionner ce programme, vous devez avoir une image logo.png à la racine de votre projet (ou modifier le nom de l'image!).
import java.awt.Event; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JLayeredPane; import javax.swing.JPanel;
public class Test2 extends JFrame implements MouseMotionListener{ JLabel[] label = new JLabel[100]; //Copies de l'image JPanel p ;//notre panel principal qui contient les images int nbCopie=0; //nombre de copies existantes public Test2(){//constructeur qui créé la fenetre principale super("titre"); p = new JPanel(null); createCopy(); //on ajoute une copie au panel this.getContentPane().add(p); this.setSize(800,600); this.setVisible(true); } public static void main(String[] args) { new Test2(); }
public void createCopy(){// créé une nouvelle copie de l'image label[nbCopie]=new JLabel(new ImageIcon("logo.png")); //initialise l'image label[nbCopie].setBounds(0,0,120,160); // initialise sa position aux coordonnéees 0,0 label[nbCopie].addMouseMotionListener(this);//ajoute un mousemotionlistener pour détecter le drag n drop p.add(label[nbCopie]);//on ajoute la copie au panel p.repaint();//on redessine le panel nbCopie++; //incrémente le nombre de copies existantes }
public void mouseDragged(MouseEvent e) { //lorsque qu'on fais du drag n drop sur une copie //si la derniere copie créé a été bougée (coordonnées 0,0), //on en créé une nouvelle qui sert de modele if (label[nbCopie-1].getX() != 0 && label[nbCopie-1].getY()!=0) createCopy(); JLabel temp=(JLabel)e.getSource(); //créé une référence vers la copie sur laquelle on a cliqué
temp.setBounds(temp.getX()+e.getX()-60,temp.getY()+e.getY()-80,120,160); //déplace la copie sur laquelle je fais du drag n drop }
public void mouseMoved(MouseEvent e) { } } |
|
|
|