2016-06-09 8 views
0

In einer JavaFX-Phase möchte ich Benutzereingaben validieren, wenn der Fokus ein Textfeld verlässt. Wenn die Benutzereingabe kein gültiges Alter hat (0 bis 120), wird eine Dialog using ControlsFX Dialogs mit einer Fehlermeldung angezeigt.JavaFX Create-Dialog bei verlorenem Fokus stürzt die App beim Schließen des Fensters ab

Hier ist der Code:

participantAgeTextField.focusedProperty() 
         .addListener(new ChangeListener<Boolean>() { 
     @Override 
     public void changed(ObservableValue<? extends Boolean> ov, 
          Boolean oldPropertyValue, Boolean newPropertyValue) 
     { 
      if(!newPropertyValue) { // lost focus 
       if(!participantAgeTextField.getText().isEmpty()) { 
        if (participantAgeTextField.getText().matches("^\\d+$")) { 
         int val = Integer. 
            parseInt(participantAgeTextField.getText()); 
         if(val <= 0) { 
          val = 1; 
         } else if(val > 120) { 
          val = 120; 
         } 
         participantAgeTextField.setText(""+val); 
        } else { 
         participantAgeTextField.setText(""); 
         Dialogs.create() 
          .owner(null) 
          .title("Error") 
          .masthead(null) 
          .message("You must enter a valid age!") 
          .showError(); 
        } 
       } 
      } 
     } 
    }); 

Dies funktioniert gut, außer wenn ein Benutzer einen ungültigen Wert eingibt, und dann versucht, das Fenster zu schließen, indem Sie die Taste „X“ in der oberen rechten Ecke des Fensters klicken (Bühne).

In diesem Fall "hängt" die Anwendung. (Seltsamerweise nur in Windows, passiert nicht unter Linux).

Ich habe nach einem Fix gesucht, wie die Meldung nicht anzuzeigen, wenn der Fokus auf das "X" des Fensters ändert. Ich habe jedoch keinen Weg gefunden, dies zu erkennen.

Andere Ideen, wie dies zu beheben wäre sehr dankbar!

Joris

EDIT Wahrscheinlich verursacht ControlsFX den Absturz. Ich kann keine JavaFX-Dialoge (eingeführt in 8u40) verwenden, weil ich Javafx 8u25 verwende. Alle Alternativen sind willkommen!

EDIT 2 Der Absturz kann nicht mit ControlsFX Dialoge, aber sie schaffen die Fehlermeldung ‚von Hand‘, wie DVarga vorgeschlagen vermieden werden. Dies führt jedoch dazu, dass die Fehlermeldung angezeigt wird, nachdem das Fenster geschlossen wurde. Irgendwelche Ideen, wie das verhindert werden kann?

+0

Haben Sie versucht mit dem Standard JavaFX 'Alert'? \t 'Alert Alarm = neue Warnung (AlertType.ERROR); alert.setContentText ("Sie müssen ein gültiges Alter eingeben!"); alert.setTitle ("Fehler"); alert.showAndWait(); ' – DVarga

+0

Guter Vorschlag, aber leider bin ich an JavaFX 8u25 (Legacy-Code) gebunden und Alert wurde in 8u40 eingeführt. – DeBaze

+0

Ah, ich sehe die Bearbeitung jetzt;) – DVarga

Antwort

0

Ich denke, ich werde den Absturz umgehen wie folgt:

Anstelle eines „Pop-up“ Dialogfenster nach dem Verlust des Fokus bei falscher Eingabe zeigt, werde ich neben dem Eingabefeld eine Fehlermeldung in rot. Bei erneuter Fokussierung kann ich dann die Fehlermeldung entfernen.

Verwandte Themen