2016-10-10 8 views
-2

Ich mache dieses Formular, fragt nach Name, Nachname, Geschlecht, Höhe, etc ... Ich habe keyTyped Action-Handler hinzugefügt, um Integritätsprüfungen zu tun, (Name nur Buchstaben, Age max 2 Zahlen, etc.)Wie wird der JTextField-Wert aktualisiert, um dem tatsächlichen Wert zu entsprechen?

Die Sache ist, der Checker funktioniert, aber der Wert, den ich in der Form sehen kann, stimmt nicht mit dem realen Wert überein, zum Beispiel schreibe ich '1,333' (in Metern) für Höhe, der Checker macht seine Arbeit und erzählt der Benutzer, der nur Werte wie 1.33 akzeptiert.

So habe ich

formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 

Wenn ich 1.333 in der TextField- schreiben, gespeichert der reale Wert ist 1,33, aber die 1.333 Aufenthalte in der TextField-

Dies ist, was ich versucht habe

formattedTextField = new JFormattedTextField(); 
    formattedTextField.addKeyListener(new KeyAdapter() { 
     @Override 
     public void keyTyped(KeyEvent arg0) { 
      String re1="^([+-]?\\d*\\.?\\d*)$"; 
      System.out.println(formattedTextField.getText().matches(re1)); 
      if(formattedTextField.getText().length() >= 1 && formattedTextField.getText().matches(re1) == true) 
      {      

       if(formattedTextField.getText().length() >= 3) 
       { 
        final BalloonTip balloonTip = new BalloonTip(
          formattedTextField, 
          new JLabel("<html>Solo se aceptan valores de altura, como 1.66, 1.76, 1.88, etc..</html>"), 
          style, 
          BalloonTip.Orientation.LEFT_ABOVE, 
          BalloonTip.AttachLocation.ALIGNED, 
          20, 10, 
          false 
         ); 
        TimingUtils.showTimedBalloon(balloonTip, 4500); 
        formattedTextField.setText(StringUtils.substring(formattedTextField.getText(), 0, 4)); 



       } 
      } 

     } 
    }); 
contentPane.add(formattedTextField, "cell 2 9,growx,aligny center"); 

Example

+4

Wie pro Kommentar zu Ihrer [vorherigen Frage] (http://stackoverflow.com/questions/ 39864104/how-can-add-a-button-to-get-two-values), bitte erstellen und veröffentlichen Sie ein gültiges [mcve]. Dies ist nicht Ihr gesamtes Programm, sondern ein sehr kurzes einfaches Programm, das Ihr Problem für uns demonstriert. –

+0

Und Sie möchten nie einen KeyListener für eine Swing-Textkomponente verwenden. Bitte verbessern Sie Ihre Frage, wenn Sie eine bessere Antwort wünschen. –

Antwort

2

Try this: Cre aß 3 globale Variablen:

private String oldValue; 
private final Pattern pattern = Pattern.compile("^\\d+\\.?\\d{0,2}$"); 
private Matcher matcher; 

Und Sie brauchen speichern alten und die neuen Wert mit regex comprare

formattedTextField.addKeyListener(new KeyAdapter() { 
    public void keyPressed(KeyEvent evt) { 
      oldValue = formattedTextField.getText(); 
    } 

    public void keyReleased(KeyEvent evt) { 
     matcher = pattern.matcher(formattedTextField.getText()); 
     if(!matcher.matches()){ 
      formattedTextField.setText(oldValue); 
     } 
    } 
} 
Verwandte Themen