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

AWT/Swing Java Discussion :

Action sur un bouton..Je comprends plus rien du tout!


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 71
    Points
    71
    Par défaut Action sur un bouton..Je comprends plus rien du tout!
    Désolé de poser ça mais je me pose des questions...

    J'ai une classe qui extends JDialog, qui à un certain moment, dois créer un nouveau JDialog.

    pour pas tout confondre (classe assez longue), j'aimerais mettre l'action du bouton à l'endroit du code ou je gère le JDialog.

    le code est plus ou moins le suivant (j'ai repris le code d'un sujet existant mais ou soit la solution n'est pas expliquée, soit j'ai pas réussit à la comprendre )
    http://www.developpez.net/forums/sho...d.php?t=107989

    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
    classe interface{
     
       public void EcranSecondaire(){
     
          /*création de l'interface*/
     
       }
     
       public void EcranPrincipale(){
     
          /*creation de l'interface avec un bouton bNext*/
             bNext.addActionListener(new ActionListener(){
     
            public void actionPerformed(ActionEvent event){
     
               this.EcranSecondaire;                
     
                     }
     
          });
     
       }
     
    }
    J'ai bien compris que this dans l'exemple represente l'objet de type ActionListener ..

    Mais comment appeler des méthodes depuis cet endroit?
    (sans créer de nouvelle instance .. vu que cela créerait une fenetre)


    EDIT : Parce que là ou je ne comprend pas du tout c'est si je reprend un bout de code que j'ai déjà fait (et qui marche très bien) :
    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
    tag.addMouseListener(new MouseAdapter() { 
             public void mousePressed(MouseEvent e) { 
              if(SwingUtilities.isRightMouseButton(e)){
               System.out.print("Add : ");
               if (tag.getClosestPathForLocation(e.getX(), e.getY()) == tag.getSelectionPath()){
                 if(tag.getSelectionPath().getParentPath() != null){
                  new InterfaceAddTag(InterfaceDetectionCl.getPath(tag.getSelectionPath().getParentPath()),pathText.getText());
                  updateTree();
                 }  
               }
               else{
                tag.setSelectionPath(tag.getClosestPathForLocation(e.getX(), e.getY()).getParentPath());
                if(tag.getSelectionPath() != null){
                 new InterfaceAddTag(InterfaceDetectionCl.getPath(tag.getSelectionPath()),pathText.getText());
                 updateTree();
                }
               }
              }
             } 
           });
    tag est un JTree de la classe...et pourtant j'arrive à y accéder...
    (Dans mon cas, je veut accéder à un JTextField)...
    Et ici on voit pathText qui est un JTextField => je comprend plus rien..

    pourquoi d'un côté ca marche et pas de l'autre??

  2. #2
    Invité
    Invité(e)
    Par défaut
    dans le premier code, tu fais this.EcranSecondaire, this représente l'objet en cours et ici un ActionListener.
    Tu fais new ActionListener(){} donc tu surcharge la classe ActionListener en créant une classe anonyme.

    Le 2e exemple n'est pas le même car tu ne fais pas this. Tu utilise la variable tag crée dans la classe supérieure (je ne sais pas comment la citée).

    dans le premier exemple pour accèder à la classe en cours il faut que tu la nomme explicitement : Interface.this.ecranSecondaire();

    Cela représente bien avantages et inconvénients des classes anonyme:

    - avantages : tu accède simplement aux variables, attributs et méthodes de ta 1e classe à partir de la classe anomyme.
    - inconvénients : c'est bien moins clair et pas du tout réutilisable.


    PS : on mets une majuscule au nom de classe mais pas aux méthodes !

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2004
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 116
    Points : 71
    Points
    71
    Par défaut
    Bon le JAVA c'est décidé... c'est plus pour moi! lol

    j'ai retapé EXACTEMENT le même code que ce j'avais mis hier (le premier code du premier message n'était pas de moi... c'est juste que j'avais plus le code sous la main et que je l'ai pris pour une question de facilité):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    okRenommer.addMouseListener(new MouseAdapter() { 
                     public void mousePressed(MouseEvent e) { 
                      if(SwingUtilities.isLeftMouseButton(e)){
                      System.out.println("ACTION");
                      renommer.getText();
                      }
                     } 
                   });
    avec renommer = jtextfield..
    hier, j'ai eut beau : effacer, retaper ce *^*^ù de renommer.getText();, tenter d'autre truc.. il me mettait à chaque fois la même erreur :
    +/- la variable que je devais appeller devait etre déclarée en final.


    et aujourdhui plus rien.

    Soit Eclipse à des problemes... soit c'est moi qui devient totalement tarré!!

  4. #4
    Invité
    Invité(e)
    Par défaut
    peux tu mettre le code de ta classe ?
    le message d'erreur ?

    Code :
    okRenommer.addMouseListener(new MouseAdapter() {
    public void mousePressed(MouseEvent e) {
    if(SwingUtilities.isLeftMouseButton(e)){
    System.out.println("ACTION");
    renommer.getText();
    }
    }
    });


    avec renommer = jtextfield..
    hier, j'ai eut beau : effacer, retaper ce *^*^ù de renommer.getText();, tenter d'autre truc.. il me mettait à chaque fois la même erreur :
    +/- la variable que je devais appeller devait etre déclarée en final.
    renommer doit être effectivement final si ce n'est pas un attribut de la classe. Mais qu'est-ce qui t'empêche de la mettre final ?
    Si tu utilise eclipse tu doit avoir une petite croix rouge t'indiquant quoi faire, non ?

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

Discussions similaires

  1. Action sur un bouton
    Par brasco06 dans le forum Composants
    Réponses: 1
    Dernier message: 19/11/2005, 20h15
  2. Je n'y comprend plus rien
    Par Pingouinvert dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 11/09/2005, 10h57
  3. [debutant] action sur un bouton
    Par EssaiEncore dans le forum ASP
    Réponses: 22
    Dernier message: 18/02/2005, 14h02
  4. [Kylix] Je n'y comprends plus rien
    Par fafamonteko dans le forum EDI
    Réponses: 5
    Dernier message: 02/03/2004, 16h48
  5. [Flash MX] Action sur un bouton
    Par WriteLN dans le forum Flash
    Réponses: 9
    Dernier message: 20/10/2003, 14h01

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