Probleme valeur TextField

elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010 - 9 juin 2010 à 16:52
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010 - 10 juin 2010 à 12:35
Bonjour,
pour simplifier le problème:
j'ai envi de récuper la valeur d'un textField et la transmettre a un autre champ d'une autre classe

Class1
public int getMontantJTField() {
return  Integer.parseInt(montantJTField.getText());
}


 int nbDecaissement = new Class1().getMontantJTField();


l'erreur
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:468)
at java.lang.Integer.parseInt(Integer.java:497)


merci de votre aide

13 réponses

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
9 juin 2010 à 17:15
En fait, tu initialise ton string avec "" dans la classe et il est impossible de le parser. Je pense que tu voudrais récupérer 0 pour la chaine "" (peu etre) dans ce cas

public int getMontantJTField() {
int res = 0;
if(montantJTField.getText().compareTo("")==0){
try{
res = Integer.parseInt(montantJTField.getText());
}
catch(Exception e){
e.printStackTrace();
//Pour gérer les erreur de parsing
}
}
return  res;
}
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
9 juin 2010 à 17:48
oui j'ai compris l'erreur mais ta correction ne change pas grand chose sauf que j'arrive a accédé à mon onglet

pour mieux expliquer le problème : j'ai envie de recupérer la valeur entrée dans le textfield, lui appliquer un calcul et afficher le resultat dans un 2ème onglets, ainsi je veux qu'a chaque fois que l'utilisateur change d'onglet j'actualise le resultat.

donc j'ai ajouté un listener a mon tabbedPane et c'est là que j'ai besoin d'envoyer la valeur du champ.

ps: cette étape est primordiale pour mon projet , merci
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juin 2010 à 17:53
Salut,

Ton code est correct (si ce n'est qu'il faut bien tester que le champ contient un nombre, sinon il te lévera une exception).

Après, il faut appeler ta fonction à partir de ta classe qui doit l'utiliser en utilisant bien sûr l'instance de classe qui contient ton textfield, et non en créer une nouvelle.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
9 juin 2010 à 18:04
"Après, il faut appeler ta fonction à partir de ta classe qui doit l'utiliser en utilisant bien sûr l'instance de classe qui contient ton textfield, et non en créer une nouvelle."

tu peux me réexpliquer cette phrase stp avec un peu du code?

c'est pas mieux qu'au moment du changement de l'onglet qu'il faut envoyer la veur du champ ?
0

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

Posez votre question
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 371
9 juin 2010 à 18:09
Tu as un objet de type Class1 (le nom du type est discutable) qui contient un JTextField admettons que cet objet s'appelle o1.

Quand tu veux appeler ta fonction, il faut faire o1.getMontantJTField();

si tu fais new Class1().getMontantJTField(); tu créé une nouvelle instance de ton objet et tu appelles la fonction qui te retournera toujours le même résultat.
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
9 juin 2010 à 18:14
Salut,

Et bien très récemment, y'avait un membre qui avait exactement le même problème, mais son code était ainsi :
Etudiant etudiant new Etudiant(); // création d'une nouvelle instance de la classe etudiant> textfield vide...
Integer.parseInt(etudiant.getTextField().getText()); // là forcément ca plantait

Non, il faut appeler ta méthode sur l'instance de la classe contenant ton textfield qui a été remplit, du style :
Etudiant etudiant = new Etudiant(); // instanciation et affichage de l'interface graphique
eudiant.show();

et à l'endroit où tu veux faire le calcul :
Integer.parseInt(etudiant.getTextField().getText()); // ne pas recréer une instance, mais utiliser l'instance existante.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
10 juin 2010 à 11:01
je m'embrouille entre les 2 réponses j'arrive pas a saisir
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 juin 2010 à 11:07
Salut,

Fais ton implémentation, et si ca ne marche pas comme tu le veux, reviens nous montrer ton code. Ma remarque c'est pour l'étape d'après...
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
10 juin 2010 à 11:40
ok merci

classe où je crèe mon tabbedpane
tabbedPane.addChangeListener(this);
public void stateChanged(ChangeEvent e) {
        if(tabbedPane.getTitleAt(tabbedPane.getSelectedIndex())= ="Résultat"){
        int montantSaisie=  new OngletSaise().getMontant();
        new OngletResultat().setMontantSaisi(montantSaisie);
        }
    }


class OngletSaise
public int getMontant() {
int res = 0;
if(montantJTField.getText().compareTo("")= =0){
try{
res = Integer.parseInt(montantJTField.getText());
}
catch(Exception e){
e.printStackTrace();
//Pour gérer les erreur de parsing
}
}
return res;
}

class OngletResultat
public void setMontantSaisi(int montantSaise) {
this.montantSaise = montantSaise;
}
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 juin 2010 à 11:47
Salut,

Bon ben voilà, je m'en doutait bien, tu es tombé dans le piège :
tabbedPane.addChangeListener(this);
public void stateChanged(ChangeEvent e) {
if(tabbedPane.getTitleAt(tabbedPane.getSelectedIndex())=="Résultat"){
int montantSaisie= new OngletSaise().getMontant();
new OngletResultat().setMontantSaisi(montantSaisie);
}
}

Dans les lignes en rouge, tu crée une nouvelle instance à chaque fois que ton listener se déclenche. Tu ne travaille donc plus sur l'instance qui contient la valeur, mais sur une nouvelle instance (donc textfield vide). Il te faut utiliser ton OngletSaise et OngletResultat que tu as ajouté à ton JTabbedPane et non créer une nouvelle instance.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
10 juin 2010 à 12:04
j'imagique que dans ce cas le resultat ne sera pas mis à jour à chaque fois que je change d'onglet
le mécanisme ne m'est pas clair, je suis nouveau en java, si c possible de me corriger le code ca m'aidera beaucoup plus
0
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 130
10 juin 2010 à 12:14
Salut,

Ben je t'ai donné les pistes, à toi de l'appliquer à ton code :

Lors de la création de ton interface, tu crée une instance de tes OngletSaise et OngletResultat, il faut les stocker dans une variable membre de ta classe principale, et utiliser ces variables pour récupérer tes valeurs.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
0
elninomed Messages postés 15 Date d'inscription vendredi 9 avril 2010 Statut Membre Dernière intervention 11 juin 2010
10 juin 2010 à 12:35
je ne sais ce qu'il m'arrive mais je suis OUT !
0
Rejoignez-nous