IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Agents de placement/Fenêtres Java Discussion :

Gestion evenement souris


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut Gestion evenement souris
    Bonjour,

    J'ai recherché dans les forums mais je n'ai pas trouvé de réponse a ma question.

    Pour faire simple , j'ai une interface graphique en swing composé :
    - d'un JToolBar
    - d'un Jpanel
    le tous dans une JFrame

    Dans la JToolBar j'ai 2 bouton l'un pour dessiner une ligne et l'autre un carre.
    J'ai crée 3 classes : CLigne -> gestion dessin de la ligne
    CRectangle -> gestion dessin rectangle
    CInterface -> gestion interface globale

    j'arrive bien à capturer l'appuie de la souris sur le bouton ligne ou rectangle mais apres je voudrais dessiner une ligne, ou un rectangle , dans mon JPanel comment dois je faire ?

    Je ne comprends pas comment je peux redefinir les evenenment souris ayant rapport au JPanel dans chaque classe CLigne et CRectangle sachant que ceux ci sont deja definie dans CInterface.

    J'espere avoir ete assez clair, merci pour la pertinence de vos reponses et la rapidité avec laquel vous repondez.

    PS : je développe sous jbuilderX



    [Modéré par Didier]
    Ajout de tag dans le titre
    Lire les règles du forum : Règles du forum Java

  2. #2
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CLigne -> gestion dessin de la ligne 
    CRectangle -> gestion dessin rectangle 
    CInterface -> gestion interface globale
    As tu une hierarchie entre ses classes, CLigne et CRectangle implemente CInterface :
    Dans ce cas la tu redefini tes MouseLIstener pour chacune des sous classes...
    Sinon a quoi te sert CInterface ?
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut hiérarchie
    Non je n'ai pas fais la hierarchie comme tu me le dis. Je debute et je galere avec la notion objet. Si j'essaye d'implementer CLigne a Cinterface j'ai le probleme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class CLigne extends JPanel implements CCadrePrincipal
    probleme : interface attendue ici

    (note : pour la compréhension de lecture j'avais appelé CCadrePrincipale CInterface dans mon message donc CCadrePrincipale = CInterface.

    J'ai declare CCadrePrincipale de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class CCadrePrincipale extends JFrame
    et donc voila je suis encore bloqué !

    Citation Envoyé par narfiggo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CLigne -> gestion dessin de la ligne 
    CRectangle -> gestion dessin rectangle 
    CInterface -> gestion interface globale
    As tu une hierarchie entre ses classes, CLigne et CRectangle implemente CInterface :
    Dans ce cas la tu redefini tes MouseLIstener pour chacune des sous classes...
    Sinon a quoi te sert CInterface ?
    [/code]

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Bon, deja il faudrais que tu explique un peu plus omment tu as implémenté tes classes, ce qu'elles font, comment elle le font et la hierarchie entre elle.
    Mais je vais quand même essayer de te fournir une réponse en ésperant que c'est ce que tu demande
    Donc si j'ai bien compris le fonctionnement de ton appli, si tu veux dessiner une ligne, tu clique d'abord sur un bouton, et ensuite tu dois dessiner la ligne.
    Dans ce cas je pense qu'une fois que tu as appuyer sur ton bouton il faut que tu te mette à l'ecoute des cliques dans ta fenetre en implémentant un mouseListener avec le methode mousePressed. ensuite, une ligne étant défini par 2 points, dans ta méthode mousepressed, tu enregistre la position des clique en récuprant les valeurs avec les methodes getX() et getY() de mouseEvent. Tu y ajoute un compteur et des tests pour etre sur que les cliques sont au bon endroit (c'est a dire à l'interieur de ton JPanel si j'ai bien compris) et dés que le compteur affiche 2 clique tu dessine une ligne avec la methode drawline de graphics2D en lui donnée les coordonnées des deux point que tu as stocké.
    Pour le rectangle même principe avec 2 points et la méthode draw(new Rectangle(x,y, largeur, hauteur)). Le premier point te donne les x et y d'origine et le second te permet de calculé la largeur et la hauteur.

    maintenant tu peux aussi faire des truc plus évolué avec un MouseMotionListener te permettant de détecter les mouvement de la souris et en plus des cli, les "drag" qui sont iun déplacement de la souris avec le bouton enfoncé. Ceci peux par exemple te permettre d'afficher la ligne en construction pendant que le souris ce deplace ...

    En ésperant t'avoir un peu aidé, mush_H

  5. #5
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Oui ton prob est simple, en java on implement des interfaces (qui sont des classes abstraite dont tu ne peux pas creer d'objet, pour faire simple) et on herite de classe.
    de plus tu ne peux heriter que d'une seule classe, mais si celle -ci herite d'une autre, tu auras toute les methodes défini dans les 2 classe qui te seront accésible.
    Exemple : On a trois classe A B et C
    avec dans chacune les methodes a() pour A b() pour B et c() pour C.
    si b herite de A et C de B, alors dans A tu peux utiliser que a(), dans B a() et b(), et dans C a() b() et c().

    Donc comme je suppose que ta classe CCadrePrincipal herite deja de JPanel, pas besoin de le mettre dans CLigne.

    tu dois donc mettre :
    public class CLigne extends CCadrePrincipal


    voili, voilu, mush_H

  6. #6
    Membre actif
    Inscrit en
    Avril 2004
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 238
    Points : 265
    Points
    265
    Par défaut
    En fait tes classes CLigne et CRectangle c'est plus pour savoir comment "dessiner", reagir au click de souris...

    Voila en gros comment je verrais ton truc :

    Donc vaut mieux que tu fasse une classe JPanel qui represente ta zone de dessin. Sur ce panel tu "attaches" un MouseListener et MouseMotionListener.
    Ensuite tu as une interface Dessin. Une classe DessinLigne et une autre DessinRectangle qui implemente Dessin.
    Dans cette interface Dessin tu defini les methodes de click souris, deplacement...

    Tu te cree un objet Dessin, quand l'utilisateur click sur le bouton ligne, tu fais dessin = new DessinLigne();, s'il click sur le rectangle tu fais dessin = new DessinRectangle(); ; et sur ton Listener de la souris, tu appelles la methode dessin.click , dessin.depalcement...
    "Quand le sage montre la lune,
    L'idiot regarde le doigt."

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Merci a tous de vos réponses.

    Ton raisonnement correspond parfaitement a mon application mush_H; par contre je ne peux pas mettre directement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class CLigne extends CCadrePrincipal
    car CCadrePrincipal herite de JFrame et non pas de JPanel.

    Voici le code de ma classe CLigne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    package Dessin;
     
    import javax.swing.*;
    import java.awt.*;
    import IHM.*;
    import java.awt.event.*;
     
    public class CLigne extends JPanel implements MouseListener { //doit aussi etendre CCadrePrincipal ??
     
    public CLigne() {
    addMouseListener(CCadrePrincipale.jPanel1); //ICI ca bug je ne peux pas mettre en place d'ecouteur sur JPanel1
    }
     
      public void mouseClicked(MouseEvent evt) {}
      public void mouseReleased(MouseEvent evt) {}
      public void mousePressed(MouseEvent evt) 
    {
    //Traitement futur a mettre....
    }
      public void mouseExited(MouseEvent evt) {}
      public void mouseEntered(MouseEvent evt) {} 
    }
    Voici quelques lignes de ma classe CClassePrincipal avec des elements que je pense pertinent pour la resolution de mon probleme.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public class CCadrePrincipale extends JFrame {
                   ....
                JPanel jPanel1 = new JPanel();
                    ...
    class CCadrePrincipale_jPanel1_mouseAdapter extends java.awt.event.MouseAdapter {
      CCadrePrincipale adaptee;
     
      CCadrePrincipale_jPanel1_mouseAdapter(CCadrePrincipale adaptee) {
        this.adaptee = adaptee;
      }
      public void mousePressed(MouseEvent e) {
        adaptee.jPanel1_mousePressed(e);
      }

    jPanel1 est le panel sur lequel je désire que les dessins soient effectués. Encore un petit coup de main svp merci

  8. #8
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Bon ton erreure est pas compliqué, voici le profil de addMouseListener :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public void addMouseListener(MouseListener l)
    Donc en fait ton code est inversé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addMouseListener(CCadrePrincipale.jPanel1);
    il faudrait plutot ecrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CCadrePrincipale.jPanel1.addMouseListener(this);

    sinon, pas la peine faire une extends de CCadrePrincipal dans CLigne parce que 1) ca n'a apparament aucun interet
    et 2) tu ne peux pas etendre de plus de 1 classe (pas d'heritage multiple en java )

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Je vous dérange une dernière fois pour aujourd'hui après je vais au lit avec un aspirine.

    J'ai bien mis dans ma classe CLigne un ecouteur sur JPanel1 et normalement je devrais avoir des reactions a chaque fois que je fais une action a la souris je devrais avoir une

    Voici le code de CLigne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
    package Dessin;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class CLigne  extends JPanel implements MouseListener {
     
      public CLigne() {
        CCadrePrincipale.jPanel1.addMouseListener(this);
      }
     
      public void mouseClicked(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseReleased(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mousePressed(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseExited(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseEntered(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      }
    }
    et pourtant j'ai rien ! Je pense que cela vient de l'appele de CLigne que je fais à partir de CCadreprincipale, voici la manière dont j'effectue l'appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private JPanel CLigne;
      void jButton2_actionPerformed(ActionEvent e) {
        CLigne = new CLigne();
          }
    jbutton2 est le bon boutil de ma barre d'outil.
    voili voilou

    le java c'est tabou on en viendra tous à bout !

  10. #10
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    Je te propose d'essayer ca et dis moi si ca marche :

    Pour l'appel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private JPanel CLigne;
      void jButton2_actionPerformed(ActionEvent e) {
        CLigne = new CLigne(this);
          }
    dans JLigne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      public CLigne(CCadrePrincipale cadreP) {
        cadreP.jPanel1.addMouseListener(this);
      }
    j'avais pas vu que c'était un appel par le nom de la classe que tu faisait.

    Dis moi ce que ca donne

  11. #11
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    En y repensant ta methode jButton2_actionPerformed, ça me chiffone une peu, pourquoi tu l'appel pas actionPerformed tout simplement ?

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par mush_H
    En y repensant ta methode jButton2_actionPerformed, ça me chiffone une peu, pourquoi tu l'appel pas actionPerformed tout simplement ?
    Ca c'est tous simplement parceque j'ai fait la conception de mon interface par jbuilder en utilisant ces concepteurs et j'ai donc laissé les noms par défaut qu'il me donne ainsi que les appel.

    Pour en revenir à mon probleme j'ai fais tes modifications dans mes sources , je n'ai aucune erreur de compilation mais cela ne me fait rien de plus ! Un action de la souris dans le JPanel ne declenche rien :-(

    voici CLigne avec tes modifs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    package Dessin;
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    public class CLigne extends JPanel implements MouseListener {
     
      public CLigne(CCadrePrincipale cadreP) {
        cadreP.jPanel1.addMouseListener(this);
      }
     
      public void mouseClicked(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseReleased(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mousePressed(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseExited(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
      public void mouseEntered(MouseEvent evt) {
        System.out.println("Tu as cliqué dans le bidule !");
      }
     
    }
    voici la modif fait dans CCadrePrincipale :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private JPanel CLigne;
      void jButton2_actionPerformed(ActionEvent e) {
        CLigne = new CLigne(this);
      }
    tu as vu mon niveau alors je dis ça a titre purement indicatif mais je me demande si la gestion de la souris dans le jPanel1 n'est pas bloqué à partir de la classe CCadrePrincipale , manip de JBuiler par defaut lors de la creation de l'interface ou erreur de ma part ?

    merci à toi pour ton aide.

  13. #13
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    je dis ça a titre purement indicatif mais je me demande si la gestion de la souris dans le jPanel1 n'est pas bloqué à partir de la classe CCadrePrincipale
    La ligne ci dessus dis justement que l'objet de la classe CLigne ecoute les actions de la souris faitent sur ton objet cadreP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cadreP.jPanel1.addMouseListener(this);
    Donc normalement pas de prob de ce coté.

    juste pour savoir, on sait jamais, tu es sûr de savoir ou regarder dans JBuilder pour voir les message system (System.out.println) ?
    Parce que la je vois pas trop purquoi ca marche pas.
    Sinon essaye de mettre le mouseListener directe dans ta classe principale et de tout faire dedans comme une brute, même si c'est pas trés beau

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    juste pour savoir, on sait jamais, tu es sûr de savoir ou regarder dans JBuilder pour voir les message system (System.out.println) ?
    Parce que la je vois pas trop purquoi ca marche pas.
    Sinon essaye de mettre le mouseListener directe dans ta classe principale et de tout faire dedans comme une brute, même si c'est pas trés beau
    oui je sais ou regarder pas de probleme

    Je vais essayer de trouver une solution pour pas programmer comme une brute tous dans la classe principale sinon mon code va ressembler a rien et si je commence a semer le bazarre pour des programmes comme ça je suis pas tirer d'affaire.

    merci encore pour ton aide

  15. #15
    Membre du Club
    Inscrit en
    Décembre 2003
    Messages
    64
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 64
    Points : 46
    Points
    46
    Par défaut
    de rien, ça t'as pas beaucoup aidé

    peut être que quelqu'un d'autre viendra a ton secours

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 40
    Points : 19
    Points
    19
    Par défaut
    J'ai trouvé !

    Et tu avais raison Mush, ton code marche parfaitement !!

    Le problème venait de mon appel sur le bouton qui ne marchait pas.

    désole

    et encore merci pour ton aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/03/2006, 19h24
  2. [c#][debutant] hook local, detecter evenements souris
    Par orelero dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/11/2005, 16h33
  3. [SVG] evenements souris
    Par ashurai dans le forum Autres langages pour le Web
    Réponses: 2
    Dernier message: 29/09/2005, 10h28
  4. [JFrame] [MouseListener] recupérer evenement souris
    Par kikoufr dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 19/08/2004, 18h45
  5. Evenement Souris
    Par Sirotilc dans le forum OpenGL
    Réponses: 2
    Dernier message: 03/01/2003, 20h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo