JTextField

JTextField - Java - Programmation

Marsh Posté le 02-02-2003 à 19:00:56    

Surement un problème idiot mais je sèche depuis trop longtemps, j'y vois plus rien
 
mon programme prend un saisie dans un JTextField et l'affiche dans la console.
 

Code :
  1. ------------------------------
  2. Classe saisie :
  3. ------------------------------
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7. public class Saisie extends JFrame {
  8. private JTextField field;
  9.   public Saisie(  ) {
  10.    
  11.     setSize(50, 50);
  12.     setLocation(200, 200);
  13. Container content = getContentPane();
  14. JTextField field = new JTextField(10);
  15. content.add(field, BorderLayout.SOUTH);
  16.     setVisible(true);
  17.    
  18.     EcouteSaisie ecsaisie1 = new EcouteSaisie();
  19.     field.addActionListener(ecsaisie1);
  20.   }
  21.  
  22.   public String contenuField() {
  23.         return field.getText();
  24.     }
  25.  
  26.   public static void main(String[] args) {
  27.  
  28.     JFrame f = new Saisie();
  29.     f.addWindowListener(new WindowAdapter(  ) {
  30.       public void windowClosing(WindowEvent we) { System.exit(0); }
  31.     });
  32.     f.setVisible(true);
  33.   }
  34. }
  35. ------------------------------
  36. Classe EcouteSaisie :
  37. ------------------------------
  38. import javax.swing.*;
  39. import java.awt.*;
  40. import java.awt.event.*;
  41. public class EcouteSaisie implements ActionListener
  42. {
  43. public void actionPerformed(ActionEvent ev)
  44. {
  45.  System.out.println(f.contenuField(););
  46. }
  47. }

 
et voici l'erreur :
 
./EcouteSaisie.java:11: cannot resolve symbol
symbol  : variable f  
location: class EcouteSaisie
                System.out.println(f.contenuField());
                                   ^
1 error
 
Si vous pouvez m'aider.
 
CHaiCA


Message édité par chaica le 02-02-2003 à 19:04:00
Reply

Marsh Posté le 02-02-2003 à 19:00:56   

Reply

Marsh Posté le 02-02-2003 à 19:09:01    

f n'est pas declarée dans ta classe EcouteSaisie

Reply

Marsh Posté le 02-02-2003 à 19:10:40    

f n'est pas déclaré? c a d que je dois marquer quoi dans EcouteSaisie?
f c'est une instance de Saisie. Je croyais que cétait accessible directement une fois crée.
 
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 19:26:20    

C'est parceque c'est pas la même classe. f n'est pas défini dans ta classe EcouteSaisie.
 
Tu peut faire de ta classe EcouteSaisie une classe interne de ta classe Saisie, et là elle aura accès à f.
 
[edit] j'ai viré mon idée de getSource, j'avais mal lu le prog.


Message édité par deltaden le 02-02-2003 à 20:12:03

---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 02-02-2003 à 19:33:49    

chaica a écrit :

f n'est pas déclaré? c a d que je dois marquer quoi dans EcouteSaisie?
f c'est une instance de Saisie. Je croyais que cétait accessible directement une fois crée.
 
CHaiCA


 
f est instancie dans le main de la classe Saisie mais il n'y aucune reference de f dans EcouteSaisie donc elle ne peut pas appeler f.contenuField()
 
Si tu veux que ca marche, tu peux par exemple passer f dans le contructeur de EcouteSaisie. C'est pas tres propre mais bon...


Message édité par fykman le 02-02-2003 à 19:35:48
Reply

Marsh Posté le 02-02-2003 à 19:34:40    

Et la référence à f on la fait comment?
 
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 19:38:19    

chaica a écrit :

Et la référence à f on la fait comment?
 
CHaiCA


 

Code :
  1. ------------------------------
  2.   Classe saisie :
  3.   ------------------------------
  4.  
  5.   import java.awt.*;
  6.   import java.awt.event.*;
  7.   import javax.swing.*;
  8.  
  9.   public class Saisie extends JFrame {
  10.    
  11.     private JTextField field;
  12.    
  13.       public Saisie(  ) {
  14.          
  15.           setSize(50, 50);
  16.           setLocation(200, 200);
  17.      
  18.        Container content = getContentPane();
  19.        
  20.        JTextField field = new JTextField(10);
  21.      
  22.        content.add(field, BorderLayout.SOUTH);
  23.           setVisible(true);
  24.          
  25.           EcouteSaisie ecsaisie1 = new EcouteSaisie(this); 
  26.        
  27.           field.addActionListener(ecsaisie1);
  28.       }
  29.      
  30.       public String contenuField() { 
  31.               return field.getText(); 
  32.         } 
  33.      
  34.       public static void main(String[] args) {
  35.        
  36.           JFrame f = new Saisie();
  37.        
  38.        
  39.           f.addWindowListener(new WindowAdapter(  ) {
  40.               public void windowClosing(WindowEvent we) { System.exit(0); }
  41.           });
  42.           f.setVisible(true);
  43.       }
  44.   }
  45.  
  46.   ------------------------------
  47.   Classe EcouteSaisie :
  48.   ------------------------------
  49.  
  50.   import javax.swing.*;
  51.   import java.awt.*;
  52.   import java.awt.event.*;
  53.  
  54.   public class EcouteSaisie implements ActionListener
  55.   {
  56.      Saisie f;
  57.      public EcouteSaisie(Saisie saisie)
  58.      {
  59.        this.f = saisie;
  60.      }
  61.      
  62.      public void actionPerformed(ActionEvent ev)
  63.      {
  64.         System.out.println(f.contenuField();) ;
  65.      }
  66.      
  67.      
  68.   }


 
voir modif.
Mais c'est pas le meileur exemple de code propre....
A mon avis le mieux et de faire que Saisie implemente ActionListener et tu vires la classe EcouteSaisie.


Message édité par fykman le 02-02-2003 à 19:43:14
Reply

Marsh Posté le 02-02-2003 à 19:42:43    

fykman a écrit :


A mon avis le mieux et de faire que Saisie implemente ActionListener et tu vires la classe EcouteSaisie.


 
 :non: inner class rulez


---------------
Just because you feel good does not make you right
Reply

Marsh Posté le 02-02-2003 à 19:44:15    

DarkLord a écrit :


 
 :non: inner class rulez


 
Aussi ,  :jap:  :jap:  mais je ne lui ai pas proposé pour ne pas l'embrouiller


Message édité par fykman le 02-02-2003 à 19:46:39
Reply

Marsh Posté le 02-02-2003 à 19:48:21    

Ca ne marche toujours pas pourtant ca me paraît cohérent .
 
Erreur :
 
Saisie.java:58: cannot resolve symbol
symbol  : method contenuField  ()
location: class javax.swing.JFrame
                System.out.println(f.contenuField());
                                    ^
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 19:48:21   

Reply

Marsh Posté le 02-02-2003 à 19:50:43    

chaica a écrit :

Ca ne marche toujours pas pourtant ca me paraît cohérent .
 
Erreur :
 
Saisie.java:58: cannot resolve symbol
symbol  : method contenuField  ()
location: class javax.swing.JFrame
                System.out.println(f.contenuField());
                                    ^
CHaiCA


 
J'avais fait une erreur, j'ai deja modifié...  ;)  ;)

Reply

Marsh Posté le 02-02-2003 à 19:56:32    

Ouais merci ca compile mais :D
 
J'obtiens ca :  
 
chaica@debian:~/progra/java/perso/graphic/saisie$ java Saisie
Exception occurred during event dispatching:
java.lang.NullPointerException
        at Saisie.contenuField(Saisie.java:31)
        at EcouteSaisie.actionPerformed(Saisie.java:58)
        at javax.swing.JTextField.fireActionPerformed(JTextField.java:421)
        at javax.swing.JTextField.postActionEvent(JTextField.java:586)
        at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:696)
        at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1384)
        at javax.swing.JComponent.processKeyBinding(JComponent.java:2078)
        at javax.swing.JComponent.processKeyBindings(JComponent.java:2104)
        at javax.swing.JComponent.processKeyEvent(JComponent.java:2041)
        at java.awt.Component.processEvent(Component.java:3553)
        at java.awt.Container.processEvent(Container.java:1164)
        at java.awt.Component.dispatchEventImpl(Component.java:2593)
        at java.awt.Container.dispatchEventImpl(Container.java:1213)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.LightweightDispatcher.processKeyEvent(Container.java:2155)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2135)
        at java.awt.Container.dispatchEventImpl(Container.java:1200)
        at java.awt.Window.dispatchEventImpl(Window.java:926)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
 
Ouais je sais je suis chiant :D
 
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 19:58:34    

chaica a écrit :

Ouais merci ca compile mais :D
 
J'obtiens ca :  
 
chaica@debian:~/progra/java/perso/graphic/saisie$ java Saisie
Exception occurred during event dispatching:
java.lang.NullPointerException
        at Saisie.contenuField(Saisie.java:31)
        at EcouteSaisie.actionPerformed(Saisie.java:58)
        at javax.swing.JTextField.fireActionPerformed(JTextField.java:421)
        at javax.swing.JTextField.postActionEvent(JTextField.java:586)
        at javax.swing.JTextField$NotifyAction.actionPerformed(JTextField.java:696)
        at javax.swing.SwingUtilities.notifyAction(SwingUtilities.java:1384)
        at javax.swing.JComponent.processKeyBinding(JComponent.java:2078)
        at javax.swing.JComponent.processKeyBindings(JComponent.java:2104)
        at javax.swing.JComponent.processKeyEvent(JComponent.java:2041)
        at java.awt.Component.processEvent(Component.java:3553)
        at java.awt.Container.processEvent(Container.java:1164)
        at java.awt.Component.dispatchEventImpl(Component.java:2593)
        at java.awt.Container.dispatchEventImpl(Container.java:1213)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.LightweightDispatcher.processKeyEvent(Container.java:2155)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2135)
        at java.awt.Container.dispatchEventImpl(Container.java:1200)
        at java.awt.Window.dispatchEventImpl(Window.java:926)
        at java.awt.Component.dispatchEvent(Component.java:2497)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
 
Ouais je sais je suis chiant :D
 
CHaiCA


 
T'a bien passe le this dans le contructeur ??
(voir dans la classe Saisie) :

Code :
  1. EcouteSaisie ecsaisie1 = new EcouteSaisie(this);

Reply

Marsh Posté le 02-02-2003 à 20:03:20    

Voici ma version actuelle :  
 
 

Code :
  1. import java.awt.*;
  2. import java.awt.event.*;
  3. import javax.swing.*;
  4. public class Saisie extends JFrame {
  5. private JTextField field;
  6.   public Saisie(  ) {
  7.    
  8.     setSize(50, 50);
  9.     setLocation(200, 200);
  10. Container content = getContentPane();
  11. JTextField field = new JTextField(10);
  12. content.add(field, BorderLayout.SOUTH);
  13.     setVisible(true);
  14.    
  15.     EcouteSaisie ecsaisie1 = new EcouteSaisie(this);
  16.     field.addActionListener(ecsaisie1);
  17.   }
  18.  
  19.  
  20.   public String contenuField() {
  21.         return this.field.getText();
  22.     }
  23.  
  24.   public static void main(String[] args) {
  25.  
  26.     JFrame f = new Saisie();
  27.     f.addWindowListener(new WindowAdapter(  ) {
  28.       public void windowClosing(WindowEvent we) { System.exit(0); }
  29.     });
  30.     f.setVisible(true);
  31.   }
  32. }
  33. class EcouteSaisie implements ActionListener
  34. {
  35.    Saisie f;
  36.    
  37.          public EcouteSaisie(Saisie frame)
  38.          {
  39.              this.f = frame;
  40.          }
  41. public void actionPerformed(ActionEvent ev)
  42. {
  43.  System.out.println(f.contenuField());
  44. }
  45. }

 
 
Voili voila
 
Mais f est déclaré en Saisie alors ca pose pas des problèmes dans la méthode contenuField() qui contient un field de type JTextField?
 
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 20:11:12    

Et comment fait on pour déclarer une classe interne?
 
CHaiCA

Reply

Marsh Posté le 02-02-2003 à 20:13:40    

comme ca:  

Code :
  1. ------------------------------
  2.   Classe saisie :
  3.   ------------------------------
  4.  
  5.   import java.awt.*;
  6.   import java.awt.event.*;
  7.   import javax.swing.*;
  8.  
  9.   public class Saisie extends JFrame {
  10.    
  11.     private JTextField field;
  12.    
  13.       public Saisie(  ) {
  14.          
  15.           setSize(50, 50);
  16.           setLocation(200, 200);
  17.      
  18.        Container content = getContentPane();
  19.        
  20.        JTextField field = new JTextField(10);
  21.      
  22.        content.add(field, BorderLayout.SOUTH);
  23.           setVisible(true);
  24.          
  25.           EcouteSaisie ecsaisie1 = new EcouteSaisie(); 
  26.        
  27.           field.addActionListener(ecsaisie1);
  28.       }
  29.      
  30.       public String contenuField() { 
  31.               return field.getText(); 
  32.         } 
  33.      
  34.       public static void main(String[] args) {
  35.        
  36.           JFrame f = new Saisie();
  37.        
  38.        
  39.           f.addWindowListener(new WindowAdapter(  ) {
  40.               public void windowClosing(WindowEvent we) { System.exit(0); }
  41.           });
  42.           f.setVisible(true);
  43.       }
  44.  
  45.    ------------------------------
  46.    Classe EcouteSaisie :
  47.    ------------------------------
  48.  
  49.    import javax.swing.*;
  50.    import java.awt.*;
  51.    import java.awt.event.*;
  52.  
  53.    private class EcouteSaisie implements ActionListener
  54.     {
  55.      
  56.      
  57.       public void actionPerformed(ActionEvent ev)
  58.       {
  59.          System.out.println(contenuField();) ;
  60.       }
  61.      
  62.      
  63.    }
  64. }


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 02-02-2003 à 20:32:03    

et pourquoi pas simplement :
 

Code :
  1. ------------------------------
  2. Classe saisie :
  3. ------------------------------
  4. import java.awt.*;
  5. import java.awt.event.*;
  6. import javax.swing.*;
  7. public class Saisie extends JFrame {
  8. private JTextField field;
  9. public Saisie() {
  10.  
  11.      setSize(50, 50);
  12.      setLocation(200, 200);
  13.  Container content = getContentPane();
  14.  JTextField field = new JTextField(10);
  15.  content.add(field, BorderLayout.SOUTH);
  16.      setVisible(true);
  17.  field.addActionListener(new ActionListener() {
  18.   public void actionPerformed(ActionEvent e) {
  19.    System.out.println(contenuField());
  20.   }
  21.  });
  22.  }
  23.  public String contenuField() { 
  24.          return field.getText(); 
  25.     } 
  26.  public static void main(String[] args) {
  27.      Saisie f = new Saisie();
  28.     f.addWindowListener(new WindowAdapter() {
  29.         public void windowClosing(WindowEvent we) { System.exit(0); }
  30.      });
  31.  
  32.      f.setVisible(true);
  33.  }
  34. }


Message édité par HappyHarry le 02-02-2003 à 20:35:30
Reply

Marsh Posté le 02-02-2003 à 21:34:31    

HappyHarry a écrit :

et pourquoi pas simplement :
...


 
Aussi oui, mais c'est quand même moins clair au point de vue lisibilité je trouve. Enfin, ici, ca ne change pas grand chose comme il n'y a qu'une méthode dans actionPerformed.


Message édité par deltaden le 02-02-2003 à 21:36:15

---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Marsh Posté le 02-02-2003 à 21:35:45    

deltaden a écrit :


 
Aussi oui, mais c'est quand même moins clair au point de vue lisibilité je trouve.


 
boarf, tant que ca reste simple, c tres lisible ...

Reply

Marsh Posté le 02-02-2003 à 21:37:00    

HappyHarry a écrit :


 
boarf, tant que ca reste simple, c tres lisible ...  


oui, c'est pour ca que j'ai édité mon message ;)


---------------
"La Terre est le berceau de l'humanité, mais on ne passe pas toute sa vie au berceau." - Konstantine Tsiolkovski
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed