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

Composants Java Discussion :

gestion d'événements, utilisation de JTextField


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut gestion d'événements, utilisation de JTextField
    Bonjour,
    dans une classe ou je gère les événements, je voudrais modifier un objet JLabel : j'aimerais changer la valeur de la chaîne de ce JLabel losrque je clique sur un bouton. Mais quand je clique sur ce bouton gérer avec MouseListener (j'ai aussi essyé avec ActionListener) je reçois un message incompréhensible dans l'invité de commande et bien sûr cela ne marche pas ...
    je vous donne la nature du message :
    Exception in thread "AWI-EventQueue-0" java.lang.NullPointerException
    ce message est ensuite suivi de plein de fichiers avec un "at" devant. Ils commencent tous par "java.awt" sauf un : "javax.swing".
    Je vous donne le code de mon gestionnaire d'événements :
    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
     
    class CActionCalculer implements MouseListener {
    	  public void mouseClicked(MouseEvent e) {
    		int portance = Integer.parseInt(texte5.getText());
    		textefin.setText(String.valueOf(portance));
    	  }
    	  public void mouseEntered(MouseEvent e) {
    	  }
          public void mouseExited(MouseEvent e) {
          }
          public void mousePressed(MouseEvent e) {
          }
          public void mouseReleased(MouseEvent e) {
          }
      }
    je ne vois pas d'où viens le problème étant donné que j'utilise quasiment un exemple du livre sur lequel j'apprends java. Je précise : textefin est un Jlabel, et texte5 un JTextField.

    Si quelqu'un connaît ce genre d'erreur, merci d'avance.
    Cordialement,
    Coralex

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 47
    Par défaut
    si tu n'as rien d'autre à capturer que le clic, alors utilise plutôt un ActionListener.
    es-tu sure que texte5 et textefin sont bien initialisés ?

    envoie le reste du code intéressant si cela ne fonctionne toujours pas.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Salut.
    En effet, tu devrais utiliser un ActionListener si tu cherches à capturer le clic sur un bouton.
    Ensuite, tu ne vérifies pas que text5.getText() te renvoi bien un nombre, il est donc fort probable que dans certains cas tu es une NumberFormatException, indiquant que la méthode Integer.parseInt(texte) n'a pas fonctionné, tout simplement car la chaîne de caractère ne représente pas un nombre entier valide. Dans ce cas, ta variable portance reste à null, il est donc logique que la méthode String.valueOf(portance) te renvoi l'erreur suivant : NullPointerException, car portance vaut null.

    J'espère avoir été assez clair. Sache aussi que le message à rallonge que tu as obtenu n'est autre que la "pile" des dernières actions effectuée par ton programme avant de tomber sur ton erreur, ça te permet de savoir d'où provient l'erreur.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut ca ne marche pas plus avec ActionListener
    Bonjour,
    et merci pour vos conseils mais le problème ne vient pas de mon gestionnaire d'événement visiblement (puisque j'ai un nouvelle fois essyé avec actionListener et cela ne marqhe pas plus). Je vous donne donc le code en entier, je précise : dans mon gestionnaire d'événements, aucune des deux actions demandées ne marche et elles renvoient la même erreur. En réalité c'est avc la première que mon programme va fonctionner, après avoir fait des comparaisons entre les différentes valeurs des JTextField, et en appellant ces valeurs comme dans la première ligne de la deuxième action demandée.
    Je vous remercie d'avance.
    Coralex
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class CPremierTPE extends JFrame {
      JTextField texte3,texte4,texte5,texte6;
      JLabel textefin;
     
     
      public static void main(String[] args) {
        CPremierTPE choix = new CPremierTPE("TPE avion");
     
        choix.pack();
        choix.setSize(800,150); 
        choix.setVisible(true); 
      }
     
      class CActionCalculer implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
    		textefin.setText("salut");
    		//ou ceci :
    		int portance = Integer.parseInt(texte5.getText());
    		textefin.setText(String.valueOf(portance));
    	  }
      }		
     
     
     
      // Le constructeur 
      CPremierTPE(String titre) {
        super(titre); 
     
        //*******************************************
        // Forcer le thème natif
        try {
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        }
        catch(Exception ex) {
           System.err.println("Erreur de Look&Feel\n"); 
        }
     
        setLayout(new GridLayout(4,1));
     
        JPanel cellule1 = new JPanel();
        JPanel cellule2 = new JPanel();
     
     
        JLabel texte1 =  new JLabel("Ce prgramme détermine le mouvement futur de l'avion, en fonction des paramètres entrés. ");
        texte1.setFont(new Font("Monospaced", Font.PLAIN,12));
        cellule1.add(texte1);
     
     
        JLabel texte2 =  new JLabel("Entrez dans les cases des forces, les différentes intensités, en Newton, après avoir effacé leur nom.");
        texte2.setFont(new Font("Monospaced", Font.PLAIN,12));
        cellule2.add(texte2);
     
    	add(cellule1); 
        add(cellule2);
     
    	JPanel champs = new JPanel();
    	champs.setLayout(new GridLayout(1,4));
     
     
    	JTextField texte3 = new JTextField(10);
    	texte3.setText("Poussée");
    	champs.add(texte3);
     
    	JTextField texte4 = new JTextField(10);
    	texte4.setText("Traînée");
    	champs.add(texte4);
     
     
    	JTextField texte5 = new JTextField(10);
    	texte5.setText("Portance");
    	champs.add(texte5);
     
     
    	JTextField texte6 = new JTextField(10);
    	texte6.setText("Poids");
    	champs.add(texte6);
     
     
        add(champs);
        JPanel resultat = new JPanel();
    	resultat.setLayout(new GridLayout(1,2));
     
    	JButton calculer = new JButton("Calculer");
    	resultat.add(calculer);
     
        JLabel textefin =  new JLabel(texte5.getText());
        textefin.setFont(new Font("Monospaced", Font.PLAIN,12));
        resultat.add(textefin);
     
    	add(resultat);
     
        calculer.addActionListener(new CActionCalculer());
     
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     
     
      }
    }

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 282
    Par défaut
    Une erreur me saute aux yeux dans ton code.
    Tu définis au début de ta classe des variables globales, tes JTextField, et ton JLabel. Mais le problème c'est que dans ton constructeur tu n'instancie pas ces variables, mais de nouvelle variables locales à ton constructeur. Pourquoi ? car tu redonne JTextField devant, et il ne faut pas ! Si tu redéfini le type, le compilateur considère que c'est une nouvelle variable, même si elle porte le même nom.
    Ton code devrait ressembler à ceci :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class CPremierTPE extends JFrame {
      JTextField texte3,texte4,texte5,texte6;
      JLabel textefin;
     
     
      public static void main(String[] args) {
        CPremierTPE choix = new CPremierTPE("TPE avion");
     
        choix.pack();
        choix.setSize(800,150); 
        choix.setVisible(true); 
      }
     
      class CActionCalculer implements ActionListener {
    	  public void actionPerformed(ActionEvent e) {
    		try {
    			int portance = Integer.parseInt(texte5.getText());
    			textefin.setText(String.valueOf(portance));
    		} catch (NumberFormatException ex) {
    			System.out.println("Le nombre entrée n'est pas valide !");
    			textefin.setText("salut");
    		}
    	  }
      }		
     
     
     
      // Le constructeur 
      CPremierTPE(String titre) {
        super(titre); 
     
        //*******************************************
        // Forcer le thème natif
        try {
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
        }
        catch(Exception ex) {
           System.err.println("Erreur de Look&Feel\n"); 
        }
     
        setLayout(new GridLayout(4,1));
     
        JPanel cellule1 = new JPanel();
        JPanel cellule2 = new JPanel();
     
     
        JLabel texte1 =  new JLabel("Ce prgramme détermine le mouvement futur de l'avion, en fonction des paramètres entrés. ");
        texte1.setFont(new Font("Monospaced", Font.PLAIN,12));
        cellule1.add(texte1);
     
     
        JLabel texte2 =  new JLabel("Entrez dans les cases des forces, les différentes intensités, en Newton, après avoir effacé leur nom.");
        texte2.setFont(new Font("Monospaced", Font.PLAIN,12));
        cellule2.add(texte2);
     
    	add(cellule1); 
        add(cellule2);
     
    	JPanel champs = new JPanel();
    	champs.setLayout(new GridLayout(1,4));
     
     
    	texte3 = new JTextField(10);
    	texte3.setText("Poussée");
    	champs.add(texte3);
     
    	texte4 = new JTextField(10);
    	texte4.setText("Traînée");
    	champs.add(texte4);
     
     
    	texte5 = new JTextField(10);
    	texte5.setText("Portance");
    	champs.add(texte5);
     
     
    	texte6 = new JTextField(10);
    	texte6.setText("Poids");
    	champs.add(texte6);
     
     
        add(champs);
        JPanel resultat = new JPanel();
    	resultat.setLayout(new GridLayout(1,2));
     
    	JButton calculer = new JButton("Calculer");
    	resultat.add(calculer);
     
        textefin =  new JLabel(texte5.getText());
        textefin.setFont(new Font("Monospaced", Font.PLAIN,12));
        resultat.add(textefin);
     
    	add(resultat);
     
        calculer.addActionListener(new CActionCalculer());
     
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     
     
      }
    }
    Comme tu peux le voir j'ai juste supprimé les JTextField et JLabel lors de la construction, et j'ai entouré le parseInt(...) d'un try/catch pour gérer la non-validité du nombre entrée par l'utilisateur.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 20
    Par défaut
    Merci beaucoup !!! ca marche super. Je suis débutant et je ne connaissais donc pas ces subtilités du compilateur ^^.
    Cordialement,
    Coralex

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

Discussions similaires

  1. Utilisation de extjs et gestion des événements
    Par david71 dans le forum Ext JS / Sencha
    Réponses: 1
    Dernier message: 11/09/2007, 20h32
  2. Problème avec la gestion des événements
    Par CynO dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 11h07
  3. [JTable] gestion des événements
    Par soulhouf dans le forum Composants
    Réponses: 4
    Dernier message: 19/08/2005, 14h21
  4. Gestion des évènements lors d'un clique sur une image.
    Par yoghisan dans le forum Débuter
    Réponses: 7
    Dernier message: 23/06/2005, 20h04
  5. Gestion d'événements hors tables
    Par Quentin dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 11/02/2005, 01h09

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