Evenement touche suppr et souri [Résolu]

Messages postés
8
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
10 décembre 2007
- - Dernière réponse : nasriOM
Messages postés
8
Date d'inscription
mardi 30 octobre 2007
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);};
}}
 
 
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Dernière intervention
16 janvier 2009
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) {
    }
}

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de the_wwt
Messages postés
8
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
10 décembre 2007
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 98 internautes nous ont dit merci ce mois-ci

Commenter la réponse de nasriOM
Messages postés
177
Date d'inscription
jeudi 5 octobre 2006
Dernière intervention
16 janvier 2009
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
Messages postés
8
Date d'inscription
mardi 30 octobre 2007
Dernière intervention
10 décembre 2007
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.