Insertion d'une image avec la souris?

cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 - 3 mars 2010 à 19:38
 Utilisateur anonyme - 7 mars 2010 à 18:26
slt à tous.
j'utilise la Bib "Canvas" pour créer un logiciel similaire à "PacketTracer"...

je veux inserer une image dans le dessin "Canvas"(ou autre) à chaque fois que je clique avec la souris.

SVP donnez moi quelques indices, car ça fait plusieurs jours que je cherche une solution.

merci

7 réponses

Utilisateur anonyme
4 mars 2010 à 13:48
Bonjour

Utilise la classe ImageIO pour lire chaque image. Quand tu affiches l'image dans un JPanel ou un Panel, mets un MouseListener dessus pour savoir où tu cliques. Alors, récupère une instance de Graphics à partir de la BufferedImage que tu as obtenue au tout début et appelle la méthode drawImage de la classe Graphics en lui passant en paramètre les coordonnées du clic entre autres. Si tu es paumé, je t'invite à jeter un coup d'oeil dans la documentation Java :
http://java.sun.com/javase/6/docs/api/




TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
4 mars 2010 à 21:08
merci bien, j vais etudier ça

j'ai une idée moi: SVP disiez moi si cela est juste ou pas..

est ce que je peux créer un nouveau Label(avec icone comme image) dans un Panel, chaque fois qu'on clique decu?????

est ce possible?? car j'ai commancé à coder suivant cette démarche..
0
Utilisateur anonyme
5 mars 2010 à 01:30
Oui pourquoi pas?



TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
7 mars 2010 à 17:26
merci pour votre réponse cher monsieur

j'ai codé ce code pour ajouter un nouveau label en cliquant avec la souris dans le Panel1:

import java.awt.Label;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

public class frame1 extends javax.swing.JFrame {

    int x,y;
    private int preX;
    private int preY;
    private boolean pressOut;
    /** Creates new form frame */
    public frame1() {
        initComponents();
    }

    class NvLabel extends javax.swing.JLabel implements MouseListener, MouseMotionListener {
        javax.swing.JLabel n = new javax.swing.JLabel();

        public NvLabel(String image, String text){
            n.setIcon(new javax.swing.ImageIcon(getClass().getResource(image)));
            n.setText(text);
            n.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
            n.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        }

        public void mouseClicked(MouseEvent e) {

        }

        public void mousePressed(MouseEvent e) {

        }

        public void mouseReleased(MouseEvent e) {

        }

        public void mouseEntered(MouseEvent e) {

        }

        public void mouseExited(MouseEvent e) {

        }

        public void mouseDragged(MouseEvent e) {

        }

        public void mouseMoved(MouseEvent e) {

        }

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(102, 102, 102));

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel1.addMouseMotionListener(new java.awt.event.MouseMotionAdapter() {
            public void mouseDragged(java.awt.event.MouseEvent evt) {
                jPanel1MouseDragged(evt);
            }
            public void mouseMoved(java.awt.event.MouseEvent evt) {
                jPanel1MouseMoved(evt);
            }
        });
        jPanel1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jPanel1MouseClicked(evt);
            }
            public void mousePressed(java.awt.event.MouseEvent evt) {
                jPanel1MousePressed(evt);
            }
            public void mouseReleased(java.awt.event.MouseEvent evt) {
                jPanel1MouseReleased(evt);
            }
        });

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/testdragpanel/delete.png"))); // NOI18N
        jLabel1.setText("jLabel1");
        jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
        jLabel1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);

        org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel1Layout.createSequentialGroup()
                .add(349, 349, 349)
                .add(jLabel1)
                .addContainerGap(219, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(jPanel1Layout.createSequentialGroup()
                .add(80, 80, 80)
                .add(jLabel1)
                .addContainerGap(277, Short.MAX_VALUE))
        );

        org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
            .add(org.jdesktop.layout.GroupLayout.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    private void jPanel1MouseClicked(java.awt.event.MouseEvent evt) {
          this.x=evt.getX();
          this.y=evt.getY();
          NvLabel a = new NvLabel("/testdragpanel/delete.png", "delete");
          this.add(a);
          a.setLocation(x, y);
          a.setVisible(true);
          jLabel1.setLocation(evt.getX(), evt.getY());

    }
}


mais ça ne marche pas!!!
SVP aidez moi le plus tot possible.. merciiiiiiiiiiiii
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
7 mars 2010 à 18:15
Bonjour

J'ai lu ça dans la documentation Java :
A label does not react to input events.
donc je pense que tu ne vas pas pouvoir faire comme ça.

Déjà, ça se voit que tu n'as pas compris les fondamentaux de Swing, arrête d'utiliser l'outil RAD de Netbeans, tu ne comprends même pas ce que tu fais et j'avoue que ton code, c'est juste du n'importe quoi, c'est inutilement compliqué. Fais comme je t'ai proposé, reprends tout de zéro. Quand je te dis d'ajouter un MouseListener sur un composant, ça veut dire qu'il faut que tu appelles la méthode addMouseListener dessus et non que tu crées une classe qui implémente cette interface. Si tu ne vois pas comment faire, regarde dans le code source de JFPSM, j'ai eu besoin de faire des choses un peu analogue, ça peut te servir d'inspiration.





TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
cs_diabohit Messages postés 75 Date d'inscription mardi 11 novembre 2008 Statut Membre Dernière intervention 2 février 2012 1
7 mars 2010 à 18:20
merci bien mon ami; j vais voir ça
0
Utilisateur anonyme
7 mars 2010 à 18:26
Tu peux faire ça :

MouseAdapter mouseAdapter=new MouseAdapter(){

@Override
    public final void mouseClicked(MouseEvent e){
        if(SwingUtilities.isLeftMouseButton(e))
            {int x=e.getX(),y=e.getY();
             // stocke x et y quelque part ailleurs ou dans un attribut pour t'en servir après
            }
    }
};
panel.addMouseMotionListener(mouseAdapter);
panel.addMouseListener(mouseAdapter);


Mets ça dans la classe dérivant de JPanel :
@Override
protected void paintComponent(Graphics g){
    super.paintComponent(g);
    g.drawImage(bufferedImage,0,0,this);
}




TUER : http://tuer.sourceforge.net/tuer.jnlp

yeah! vive java
0
Rejoignez-nous