Changelistener auf mehrere Textfelder

r4w

Mitglied
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:
Java:
        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
 
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.
 
Danke, Joose.

Ist es auch möglich sich alle Textfelder vom Parent-Element zu holen?
Code:
**parent.getTextfields().**textProperty().addListener( (observable, oldValue, newValue) -> {
        System.out.println("TextField Text Changed (newValue: " + newValue + ")");
        // Activate Button
        enableSaveButton();
        });
 
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.
 
@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:
Java:
        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();
        }
        };

Java:
fldNachname.textProperty().addListener(listener);
 
Zuletzt bearbeitet:

Zurück
Oben