EventListener für JFormattedTextField

arthur187

Mitglied
Hallo,
ich habe folgendes Problem:
Ich habe 14 JFormattedTextFields, jedes Feld soll seine Eingabe in einer zugehörigen Variable speichern.

Idealerweise würde ich etwas wie einen TextListener verwenden, der bei jeder Wertänderung des Textfeldes ausgelöst wird. Jedoch funktioniert der TextListener nur mit TextField, nicht aber mit den JFormattedTextFields. Zudem möchte ich nur einen Listener für alle 14 Felder verwenden, jedoch weiß ich nicht, wie ich diese aus dem Event herausfinden kann.

Ich wäre auch damit zufireden, wenn ich einen FocusListener verwenden würde (mir ist nur wichtig, dass der User alle 14 Felder zumindest "berührt" hat, der Inhalt wird ja schon durch JFormattedTextField reguliert). Aber hier weiß ich ebenfalls nicht, wie ich das Textfeld identifiezieren kann, also in etwa:

Java:
public void focusGained(FocusEvent e) {
	System.out.println(e.getNameOderLabelDesTextFeldes() + "wurde fokussiert!");
}

Wenn ich das auslösende Textfeld identifizieren könnte, würde ich dann den Inhalt mit Hilfe einer switch der jeweiligen Variable zuweisen können.

Könnt ihr mir Helfen? 🙂
 
ein TextField ist doch das alte AWT, JFormattedTextField das neue(re) Swing,
die willst du doch hoffentlich nicht mischen, da hast du viel größere Probleme als Listener..

bei JTextField + JFormattedTextField bietet sich vielleicht einheitlich DocumentListener auf das Document an

----

jedes Event hat eine Source, diese Source wird eine deiner Komponenten sein
 
Also ich habe das jetzt mal so versucht:
In einer Klasse wird das Textfeld deklariert:
Java:
JLabel label = new JLabel("Label:");
JFormattedTextField feld = new JFormattedTextField(NumberFormat.getIntegerInstance());
label.setLabelFor(feld);
feld.addFocusListener(listener);  //listener ist eine eigene Klasse, die FocusEvent implementiert

Die Implementierung von focusGained sieht so aus:
Java:
public void focusGained(FocusEvent e) {
	JFormattedTextField t = (JFormattedTextField) e.getSource();
	System.out.println(t.getName());		
}

Leider gibt mir die Konsole beim Fokus auf das Feld nur "null" aus.
 
was erhoffst du denn stattdessen als Ausgabe? den Textinhalt des zugehörigen Labels?
das ist ja bisschen kühn erwartet,

dein JFormattedTextFeld hat bisher keinen Namen, kannst du wenn du willst zuweisen:
feld.setName("a");

das Label kann neben den angezeigen Text theoretisch auch noch einen Namen erhalten,
das werden dann langsam viele Möglichkeiten 😉

statt über Namen kannst du auch direkt über die Objekte gehen,
falls keine NullPointerException auftritt, dann ist t offensichtlich ein richtiges JFormattedTextFeld-Objekt, was will man mehr,
GUI-Objekte kann man ganz gut mit == abgleichen
 
Ich habe ein Objekt, das einige Variablen enthält (int/double). Jedes der 14 Textfelder soll eine zugehörige Variable beschreiben (z.B. beim Fokusverlust) und danach wird das Objekt in eine andere API eingespeist.
Alle Felder sollen über einen Listener laufen, der erkennt, welches Feld bearbeitet wurde und den Wert der jeweiligen Variable zuweist.
 
ist das irgendwie wichtig, besteht eine Frage? 😉

noch allgemeiner Tipp:
Java:
Map<Object,MeineKlasseMitAllemWichtigen> map = ..;
füllen.., Keys sind JFormattedTextFeld usw.

MeineKlasseMitAllemWichtigen m = map.get(e.getSource());
 

Zurück
Oben