# Changelistener auf mehrere Textfelder



## r4w (30. Jan 2017)

Hallo,

bin sehr neu im Java Bereich.. daher verzeiht mir bitte allzu dumme Fragen  

Es geht um ein Formular mit mehreren Textfeldern. Es gibt einen Button "speichern", der aktiv werden soll, wenn sich ein Wert in den Textfeldern ändert. 
Folgender Code funktioniert soweit:

```
fldVorname.textProperty().addListener( (observable, oldValue, newValue) -> {
        System.out.println("TextField Text Changed (newValue: " + newValue + ")");
        // Activate Button
        enableSaveButton();
        });
```

Nun würde ich es aber gerne vermeiden, den Listener für alle Textfelder einzeln anzumelden. Fände es dann nicht mehr sehr übersichtlich.

Habt ihr eine Idee?

LG


----------



## Joose (30. Jan 2017)

Erstelle ein Objekt des Listeners und füge diese Objekt jedem Textfield hinzu. So musst du den Listener nur 1x deklarieren und kannst ihn einer beliebigen Anzahl an Textfields hinzufügen.

Die Variante es nicht jedem einzeln hinzufügen zu müssen ist auch möglich: Erstelle eine Klasse welche von Textfield ableitet und füge im Konstruktor den Listener hinzu. Deine Textfields müssen dann natürlich Objekte dieser neuen Klasse sein.


----------



## r4w (30. Jan 2017)

Danke, Joose.

Ist es auch möglich sich alle Textfelder vom Parent-Element zu holen?

```
**parent.getTextfields().**textProperty().addListener( (observable, oldValue, newValue) -> {
        System.out.println("TextField Text Changed (newValue: " + newValue + ")");
        // Activate Button
        enableSaveButton();
        });
```


----------



## Joose (30. Jan 2017)

Um was handelt es sich denn? Swing oder JavaFX?
Grundlegend ist es glaub ich möglich sich alle Controls eines Containers anzuschauen bzw. in einer Schleife durchzulaufen.
Du müsstest dann nur prüfen ob es sich um Textfield handelt.
Schau einfach in der Doku nach welche Methoden alle verfügbar sind bei deinem "parent" und was sie zurückgeben.


----------



## r4w (31. Jan 2017)

@Joose: Es geht um JavaFX.
Bin noch nicht so fit, die Controls in Java zu traversieren..



> Erstelle ein Objekt des Listeners und füge diese Objekt jedem Textfield hinzu. So musst du den Listener nur 1x deklarieren und kannst ihn einer beliebigen Anzahl an Textfields hinzufügen.



Hättest Du hierzu ein Codebeispiel?


Edit: ich glaube so passt es: 

```
ChangeListener<String> listener = new ChangeListener<String>() {

        @Override
        public void changed (ObservableValue<? extends String> observable, String oldValue, String newValue) {
            System.out.println("TextField Text Changed (oldValue: " + oldValue + " -> newValue: " + newValue + ")");
            enableSaveButton();
        }
        };
```


```
fldNachname.textProperty().addListener(listener);
```


----------



## r4w (31. Jan 2017)

Thema kann gerne zu! Danke für die Hilfe!
Lösung gibt es im vorherigen Beitrag, falls es noch jmd braucht.

LG


----------

