Evenement touche suppr et souri

Résolu
nasriOM Messages postés 8 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 10 décembre 2007 - 6 nov. 2007 à 16:54
nasriOM Messages postés 8 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 10 décembre 2007 - 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);};
}}
 
 

4 réponses

the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
7 nov. 2007 à 16:51
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) {
    }
}
3
nasriOM Messages postés 8 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 10 décembre 2007
14 nov. 2007 à 14:52
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
3
the_wwt Messages postés 177 Date d'inscription jeudi 5 octobre 2006 Statut Membre Dernière intervention 16 janvier 2009 1
14 nov. 2007 à 15:09
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...
0
nasriOM Messages postés 8 Date d'inscription mardi 30 octobre 2007 Statut Membre Dernière intervention 10 décembre 2007
14 nov. 2007 à 17:00
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!!
0
Rejoignez-nous