2016-03-15 3 views
0

J'ai un JTextField vide que l'utilisateur doit modifier avec un nombre entier. Cependant, même une fois que le JTextFiled a été rempli avec un entier, quand je vais obtenir la chaîne de ce JTextField, la chaîne affiche "" (-> empty). Comment sauvegarder la nouvelle valeur du champ? que devrais-je faire? Voici le problème:Comment prendre la valeur d'un JTextField après avoir été modifié par l'utilisateur [java]

//Class where JTextField is initialized: 

javax.swing.JTextField tMax = new javax.swing.JTextField(); 
tMax.addKeyListener(new java.awt.event.KeyAdapter() { 
      public void keyTyped(java.awt.event.KeyEvent evt) { 
       tMaxKeyTyped(evt); 
      } 
     }); 
private void tMaxKeyTyped(java.awt.event.KeyEvent evt) {         
// TODO add your handling code here: 
    char c = evt.getKeyChar(); 
    if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_DELETE)) { 
     getToolkit().beep(); 
     evt.consume(); 
    } 
} 
public String getTMax() { 
    String tMaxString = tMax.getText(); 
    return tMaxString; 
} 


//Class where tMax should be used 

    //code 
    private void runBtnActionPerformed(java.awt.event.ActionEvent evt) { 
    Panel class1 = new Panel(); 
    String tMaxString = class1.getTMax(); 
    System.out.println(tMaxString); 

Quand je lance le programme et je clique sur le Run Botton un Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "". Que puis-je faire pour enregistrer le fichier JTextField modifié?

Merci beaucoup.

+0

KeyListener n'est pas ce que vous voulez. Utilisez un ActionListener. Tutoriel: https://docs.oracle.com/javase/tutorial/uiswing/components/button.html – markspace

+0

@Pino N'importe quelle raison pour laquelle vous n'importiez pas les paquets comme 'java.awt',' javax.swing'? Vos codes sont un peu difficiles à lire. – user3437460

Répondre

1

en utilisant un DocumentListener. Voici la solution:

package AppPackage; 


import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JTextField; 
import javax.swing.SwingUtilities; 
import javax.swing.event.DocumentEvent; 
import javax.swing.event.DocumentListener; 

     public class Test { 
      JFrame frame = new JFrame("Test"); 
      JPanel panel = new JPanel(); 
      JTextField option = new JTextField("HI", 10); 
      static String optionString; 

      public Test() { 
       option.getDocument().addDocumentListener(new DocumentListener() { 

        @Override 
        public void insertUpdate(DocumentEvent e) { 
         warn(); 
        } 

        @Override 
        public void removeUpdate(DocumentEvent e) { 
         warn(); 
        } 

        @Override 
        public void changedUpdate(DocumentEvent e) { 
         warn(); 
        } 

        public void warn() { 
         optionString = option.getText(); 
         System.out.println(optionString); 
        } 
       }); 
       panel.add(option); 
       frame.add(panel); 
       frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       frame.pack(); 
       frame.setVisible(true); 
      } 

       public static void main(String[] args) { 
        SwingUtilities.invokeLater(new Runnable() { 
         public void run() { 
          new Test(); 
         } 
        }); 
       } 
     } 

Espérons que cela sera utile à quelqu'un.

3

Votre champ tMax est défini deux fois. Une fois en tant que variable d'instance et une fois en tant que variable locale.

Débarrassez-vous de la variable locale:

//javax.swing.JTextField tMax = new javax.swing.JTextField(); 
tMax = new javax.swing.JTextField(); 

même une fois que le JTextFiled a été rempli d'un nombre entier,

Ne pas utiliser un KeyListener pour modifier le texte tel qu'il est tapé. Au lieu de cela, vous devriez utiliser:

  1. un DocumentFilter
  2. un JFormattedTextField
  3. un Enfin je réussi cette question JSpinner
+0

Dois-je utiliser l'un d'entre eux dans la méthode ActionPerformed de JTextField? – Pino

+0

Cette suggestion n'a rien à voir avec la méthode actionPerformed(). Il n'y a pas besoin d'un ActionListener. L'édition est effectuée au fur et à mesure que vous tapez. Qu'est-il arrivé quand vous avez essayé la suggestion? – camickr

+0

Enfin, j'ai utilisé un DocumentListener et ça a bien fonctionné! – Pino