2017-05-30 4 views
0

Pour un projet d'école, je suis en train d'écrire un programme dans lequel j'ai besoin de récupérer l'entrée utilisateur d'un JTextField. J'ai essayé d'utiliser la méthode getText(), mais elle renvoie une erreur de chaîne vide.Comment accéder à l'entrée de l'utilisateur dans un JTextField?

String s = input.getText(); 
    if(changeNum.equals("")){ 
     firstNum = s; 
    } 
    if(!changeNum.equals("")){ 
     secondNum = s; 
    } 

firstNum et secondNum sont les deux chaînes. L'erreur qui est renvoyée est:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String 

Il est retourné à cette ligne:

Double firstN = Double.parseDouble(firstNum); 

Que dois-je faire? Je vous remercie!

Editer: J'ai oublié d'ajouter que l'entrée est le nom de mon JTextField, au cas où il y aurait de la confusion.

+0

Qu'est-ce que 'changeNum'? – MadProgrammer

+0

changeNum est une chaîne –

+0

mettre l'événement qui a déclenché votre textField. – msagala25

Répondre

0

changer toutes vos varibles à double (firstNum etc.) et modifiez votre code comme:

Note: si vous ne pas utiliser les numéros negatIive

double s = null; 
try{ 
     s = Double.parseDouble(input.getText()); 
    }catch(NumberF... e){e.getMesssge();} 
    if(s > 0){ 
     if(changeNum >= 0){ 
       firstNum = s; 
     } 
     else { 
       secondNum = s; 
      } 
} 
    //if you have to convert it to String use : 

String str =String.valueOf(your double variable);

+1

Depuis Java 1.4, 'getText' ne retourne jamais' null' - en plus, ce n'est pas une exception 'NullPointerException', c'est un' NumberFormatException' – MadProgrammer

0

Voici comment J'aime le faire (dans un sens général). Disons que j'ai un panneau avec trois zones de texte et que je veux obtenir la valeur de chacune (chacune représente un type différent). Voilà ce que je ferais:

import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.BoxLayout; 

public class Panel extends JPanel 
{ 
    JTextField   textBox; 
    JTextField   intBox; 
    JTextField   floatBox; 
    JTextField   dblBox; 

    public Panel() 
    { 
    textBox = new JTextField("Hello"); 
    intBox = new JTextField("10"); 
    floatBox = new JTextField("3"); 
    dblBox = new JTextField("3.14");  

    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS)); 
    this.add(textBox);  
    this.add(intBox); 
    this.add(floatBox); 
    this.add(dblBox); 
    } 

    public String getText() 
    { 
    return textBox.getText(); 
    } 

    public int getInt() 
    { 
    try 
    { 
     return Integer.parseInt(intBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -1; 
    } 

    public float getFloat() 
    { 
    try 
    { 
     return Float.parseFloat(floatBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -2.0f; 
    } 

    public double getDouble() 
    { 
    try 
    { 
     return Double.parseDouble(dblBox.getText()); 
    } 
    catch(NumberFormatException execp) { } 
    return -2.0; 
    } 
} 

Une autre option est de faire Panel mettre en œuvre ActionListener et dblBox.addActionListener(this). Ensuite, vous pouvez demander à votre JTextField d'appeler une méthode de votre parent chaque fois que vous changez un nombre, analysez les données et écrivez des messages d'erreur dans un JLabel si le cast lance une exception, ou à des membres privés si cela réussit. Ensuite, utilisez les getters pour lire les membres privés.

+0

Le propriétaire de la question doit changer la chaîne en 'Double' et non 'int' ou 'float'. –