JavaFX Checken ob der Input einem festgelegten Format gleicht

friednoodles

Aktives Mitglied
Hallo,

ich versuche in meinem Programm zu überprüfen ob ein TextArea Input einem SimpleDateFormat entspricht. Hier der Code Ausschnitt den ich bisher habe:

Java:
    private void konvertieren() {
       
        button.setOnAction(e -> {
            if () {
                try {
                    convertTimestampToDate(textField, sdf);
                } catch (ParseException e1) {
                    e1.printStackTrace();
                }
                textArea.setText(date1 + "");

            }
        });
    }

Hier die Methode für die erste Anweisung:

Java:
    private void convertTimestampToDate(TextField textField, SimpleDateFormat sdf) throws ParseException {
        date = sdf.parse(textField.getText());
        date1 = date.getTime();

und das hier ist mein SimpleDateFormat:

Java:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");

Später möchte ich noch um ein weiteres Format erweitern, mein Problem ist derzeit aber nur das ich einfach nicht drauf komme was ich als Bedingung in der if Verzweigung nehmen soll.
Ich habe schon alles probiert.. z.B.: if(textField.equals(sdf)) oder if(textField.compareTo(sdf)) funktioniert beides nicht.
Hoffe jemand hat eine Idee für mich.

Danke schon mal für mögliche Vorschläge!
 
Ich brauche die If Abfrage weil ich später noch hinzufügen möchte, dass ich im selben textField entweder mein
Java:
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
abfragen kann, oder etwa Millis in ein Datum umwandeln kann.

Bitte korrigiere mich falls ich falsch liege
 
Wenn du es so machen willst, kannst du mit einem regulären Ausdruck prüfen, ob es sich um ein gültiges SDF handelt.
 
Regex ist ja auch nochmal ein riesen Thema in das ich mich einlesen muss ^^
Aber danke für den Tipp, werde ich sehr bald machen. Kurzfristig habe ich es so gelöst falls es Jemanden interessiert:
Java:
    private void konvertieren() {
        button.setOnAction(e -> {

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
            String textFieldInput = textField.getText();
            Date parsInToDate = new Date();
            long epochMillis;

            try {
                parsInToDate = sdf.parse(textFieldInput);
            } catch (ParseException e1) {
            }

            if (textFieldInput.equals(sdf.format(parsInToDate))) {
                epochMillis = parsInToDate.getTime();
                textArea.setText(epochMillis + "");
            } else if (textFieldInput.length() == 13) {
                long strToLong = Long.valueOf(textField.getText()).longValue();
                long long1 = strToLong;
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(long1);
                textArea.setText(sdf.format(calendar.getTime()));
            } else {
                textArea.setText("Eingabe nicht korrekt!");
            }
        });
    }
 
Vier Tipps:
  1. Benutze Lambdas möglichst nicht mit Blocks.
  2. Die Methode konvertieren macht nicht das, was man von ihr erwarten würde. Im Zusammenhang mit 1.: initialisiere den Button an anderer Stelle und rufe im Lambda konvertieren auf.
  3. Trenne Logik und Darstellung, die Methode konvertieren macht beides, konvertieren und darstellen.
  4. Nutze die "neue" Time API, z.. LocalDateTime
 
Danke für die Tipps!
1. Benutze Lambdas möglichst nicht mit Blocks.
Meinst du damit ich soll die Verzweigungen in verschiedene Methoden auslagern und diese neuen Methoden in meine "konvertieren" Methode setzen?
Die Methode konvertieren macht nicht das, was man von ihr erwarten würde. Im Zusammenhang mit 1.: initialisiere den Button an anderer Stelle und rufe im Lambda konvertieren auf.
Ja, das kann ich machen.
Trenne Logik und Darstellung, die Methode konvertieren macht beides, konvertieren und darstellen.
Verstehe glaube ich nur so halb was du damit meinst.
Die Darstellungskomponenten sind ja nur die Zeilen in denen ich auf die textArea den Text ausgeben will, oder?
Der Rest ist dann die Logik?
Nutze die "neue" Time API, z.. LocalDateTime
Das werde ich bald ausprobieren, danke
 
zu 1.: button.setOnAction(e -> konvertiere())
zu 3.: ja,im Prinzip sind das die paar Zeilen, die die eigentlich Konvertiererei übernehmen
 

Neue Themen


Zurück
Oben