Evenement touche suppr et souri [Résolu]

nasriOM 8 Messages postés mardi 30 octobre 2007Date d'inscription 10 décembre 2007 Dernière intervention - 6 nov. 2007 à 16:54 - Dernière réponse : nasriOM 8 Messages postés mardi 30 octobre 2007Date d'inscription 10 décembre 2007 Dernière intervention
- 14 nov. 2007 à 17:00
Je suis en train de programmer un petit logiciel et je bloque sur certain point.


Mon logiciel sera un logiciel de dessin, je fais du drag and drop
d'élèments et j'aimerai pouvoir les supprimmer avec la touche Suppr
mais je n'arrive pas à créer la méthode.


Sauriez vous comment je pourrais gerer les évenements du clique de la
souris et du clavier. j'aimerai que en cliquant une fois sur une image
on puisse la selectionné puis en tapant sur la touche
suppr(keyEvent.VK_DELETE) quelle se supprime.

Pouvez vous m'aider à résoudre mon problème.


voilà mon code:

import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
 
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
 
publicclass 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("drag and drop");
p = new JPanel(null);
createCopy(); //on ajoute une copie au panel
this.getContentPane().add(p);
this.setSize(800,600);
this.setVisible(true);
}
 
publicstaticvoid main(String[] args){
new Test2();
}
 
 
publicvoid 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 pa nel
nbCopie++; //incrémente le nombre de copies existantes
 
label[nbCopie]=new JLabel(new ImageIcon("image.gif"));
//initialise l'image
label[nbCopie].setBounds(60,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
}
 
private JTextField champDeTexte;
 
void DialogueEtiquette(String titre){

 
JButton bouton = new JButton("OK");
bouton.addActionListener((ActionListener)this);
 
champDeTexte = new JTextField(20);
champDeTexte.addActionListener((ActionListener)this);
 
JPanel panneau = new JPanel();
panneau.add(bouton);
 
getContentPane().add(new JLabel("Donnez l'étiquette"), BorderLayout.NORTH);
getContentPane().add(champDeTexte, BorderLayout.CENTER);
getContentPane().add(panneau, BorderLayout.SOUTH);
pack();
java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()
.getScreenSize();

setLocation((screenSize.width-getSize().width)/2,(screenSize.height-getSize().height)/2);
setVisible(true);
}
 
 
publicvoid keyPressed(KeyEvent event)
{
int keyCode = event.getKeyCode();
if(keyCode == keyEvent.VK_DELETE)
{
 
}
}
 
publicvoid 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
}
 
 
 
publicvoid mouseMoved(MouseEvent e){
 
 
 
try{}
catch(Exception err){
System.out.println("Erreur" + err);};
}}
 
 
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
the_wwt 177 Messages postés jeudi 5 octobre 2006Date d'inscription 16 janvier 2009 Dernière intervention - 7 nov. 2007 à 16:51
3
Merci
Bonjour,
quiite à balancer du code... Je me suis amusé un peu ( sachant que ce n'est sans doute pas la bonne solution, mais ça peut t'aider).
Cordialement,
Pierrick

import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class TestMe extends JFrame implements KeyListener, MouseListener,
        MouseMotionListener {
    private static final long serialVersionUID = 1L;
    private List<JLabel> selection = new ArrayList<JLabel>();
    private Random random = new Random();
    private ImageIcon icon = new ImageIcon("logo.gif");
    private JPanel p;

    public TestMe() {
        super("D`N`D");
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(800, 600);
        this.addKeyListener(this);
        this.addMouseListener(this);
        p = new JPanel(null);
        for (int i = 0; i < 100; i++)
            createCopyAleatory();
        this.getContentPane().add(p);
        Dimension screenSize = java.awt.Toolkit.getDefaultToolkit()
                .getScreenSize();

        setLocation((screenSize.width - getSize().width) / 2,
                (screenSize.height - getSize().height) / 2);
        this.setVisible(true);
    }

    public static void main(String[] args) {
        new TestMe();
    }

    public void createCopyAleatory() {
        JLabel label = new JLabel(icon);
        label.setBounds(random.nextInt(getSize().width - icon.getIconWidth()),
                random.nextInt(getSize().height - icon.getIconHeight()), icon
                        .getIconWidth(), icon.getIconHeight());
        label.addMouseListener(this);
        label.addMouseMotionListener(this);
        p.add(label);
        p.repaint();
    }

    public void mouseDragged(MouseEvent e) {
        for (JLabel label : selection) {
            label.setLocation(label.getX() + e.getX(), label.getY() + e.getY());
        }
    }

    public void mouseMoved(MouseEvent e) {
    }

    public void mouseClicked(MouseEvent e) {
    }

    public void mouseEntered(MouseEvent e) {
        if (e.getSource() instanceof JLabel) {
            JLabel label = (JLabel) e.getSource();
            if (!selection.contains(label))
                label.setBorder(BorderFactory.createEtchedBorder(Color.GREEN,
                        Color.CYAN));
        }
    }

    public void mouseExited(MouseEvent e) {
        if (e.getSource() instanceof JLabel) {
            JLabel label = (JLabel) e.getSource();
            if (!selection.contains(label))
                label.setBorder(BorderFactory.createEmptyBorder());
        }
    }

    public void mousePressed(MouseEvent e) {
        if (e.getSource() instanceof JLabel) {
            JLabel label = (JLabel) e.getSource();
            if (!selection.contains(label)) {
                if (!e.isControlDown()) {
                    for (JLabel labelSelected : selection) {
                        labelSelected.setBorder(BorderFactory
                                .createEmptyBorder());
                    }
                    selection = new ArrayList<JLabel>();
                }
                label.setBorder(BorderFactory.createLineBorder(Color.BLUE, 2));
                selection.add(label);
            } else {
                if (e.isControlDown()) {
                    label.setBorder(BorderFactory.createEmptyBorder());
                    selection.remove(label);
                } else {
                    for (JLabel labelSelected : selection) {
                        labelSelected.setBorder(BorderFactory
                                .createEmptyBorder());
                    }
                    selection = new ArrayList<JLabel>();
                    label.setBorder(BorderFactory.createLineBorder(Color.BLUE,
                            2));
                    selection.add(label);
                }

            }
        }
    }

    public void mouseReleased(MouseEvent event) {
    }

    public void keyPressed(KeyEvent event) {
    }

    public void keyReleased(KeyEvent event) {
        int keyCode = event.getKeyCode();
        if (keyCode == KeyEvent.VK_DELETE) {
            for (JLabel label : selection) {
                p.remove(label);
                p.invalidate();
                p.revalidate();
                p.repaint();
            }
            selection = new ArrayList<JLabel>();
        }
    }

    public void keyTyped(KeyEvent e) {
    }
}

Merci the_wwt 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de the_wwt
Meilleure réponse
nasriOM 8 Messages postés mardi 30 octobre 2007Date d'inscription 10 décembre 2007 Dernière intervention - 14 nov. 2007 à 14:52
3
Merci
Merci effectivement c'est pas mal
Mais il y a plein d'images partout placé aléatoirement

Moi je veux juste une bibliothèque d'images que je drag and drop! lol

Comment puis je créer un tableau avec mes images à l'intérieur?

cordialement

Merci nasriOM 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 89 internautes ce mois-ci

Commenter la réponse de nasriOM
the_wwt 177 Messages postés jeudi 5 octobre 2006Date d'inscription 16 janvier 2009 Dernière intervention - 14 nov. 2007 à 15:09
0
Merci
Bonjour samir ;-),
et bien au lieu de créer des images aléatoirement avec la méthode createCopyAleatory(),
tu les mets dans une liste:
private List<JLabel> images = new ArrayList<JLabel>();
ensuite:
public void creerImages(){
   //Tu instancie tes images et tu les ajoutes à la liste. Tu n'oublies pas d'ajouter les listeners.

}
Cordialement,
Pierrick
PS: La victoire contre lyon redonne tous les espoirs même les plus fous...
Commenter la réponse de the_wwt
nasriOM 8 Messages postés mardi 30 octobre 2007Date d'inscription 10 décembre 2007 Dernière intervention - 14 nov. 2007 à 17:00
0
Merci
Bonjour Pierrick :-)

Ok je vais essayer cela
Si je n'y arrive pas je ferai appel à toi.
Merci Pierrick

ps: La victoire contre l'OL sera le début d'une belle série!!
Commenter la réponse de nasriOM

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.