PropertyChangeListener an JFormattedTextField

Status
Nicht offen für weitere Antworten.

nuely

Mitglied
Ich habe ein Programm, welches ich nicht selbst geschrieben habe, sondern jetzt nur vollenden soll. Es besitzt mehrere JFormattedTextFields, welche jeweils einen PropertyChangeListener besitzen. Die Listener arbeiten im Endeffekt alle gleich. Sie fragen ab, ob field.getValue()!=null ist und führen dann eine Aktion mit dem Inhalt aus. Das funktioniert auch soweit. Nur bei einem Textfield ist getValue() immer null, auch wenn er einen Inhalt hat.
Letztendlich habe ich jetzt versucht das Problem in einem kleinen Beispiel außerhalb des großen Programms zu stoßen und habe zwei der TextFields mitgenommen.
Jetzt kommt es schon beim Aufruf des Programms zu einer NullPointer, wenn ich getValue() abfrage. Wie kommt das?

Code:
import javax.swing.SwingUtilities;
import java.awt.GridBagConstraints;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import javax.swing.JFormattedTextField;
import javax.swing.JPanel;
import javax.swing.JFrame;

import java.awt.GridBagLayout;

public class TextFieldTest extends JFrame {

	private static final long serialVersionUID = 1L;
	private JPanel jContentPane = null;
	private JFormattedTextField gebgeweingabe;
	private JFormattedTextField gebeingabe;
	
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				TextFieldTest thisClass = new TextFieldTest();
				thisClass.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				thisClass.setVisible(true);
			}
		});
	}

	public TextFieldTest() {
		super();
		initialize();
	}

	private void initialize() {
		this.setSize(300, 200);
		this.setContentPane(getJContentPane());
		this.setTitle("JFrame");
	}

	private JPanel getJContentPane() {
		if (jContentPane == null) {
			
			GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
			gridBagConstraints1.fill = GridBagConstraints.BOTH;
			gridBagConstraints1.gridy = 1;
			gridBagConstraints1.weightx = 1.0;
			gridBagConstraints1.gridx = 0;
			GridBagConstraints gridBagConstraints = new GridBagConstraints();
			gridBagConstraints.fill = GridBagConstraints.BOTH;
			gridBagConstraints.gridy = 0;
			gridBagConstraints.weightx = 1.0;
			gridBagConstraints.gridx = 0;
			jContentPane = new JPanel();
			jContentPane.setLayout(new GridBagLayout());
			jContentPane.add(formattedTextFieldGebindeGewicht(), gridBagConstraints);
			jContentPane.add(formattedTextFieldGebinde(), gridBagConstraints1);
		}
		return jContentPane;
	}
	private JFormattedTextField formattedTextFieldGebindeGewicht() {
		JFormattedTextField gebgeweingabe = new JFormattedTextField();
		gebgeweingabe.setValue(null); 
		gebgeweingabe.addPropertyChangeListener(new FieldGebindeGewicht());
		return gebgeweingabe;
	}
	
	private JFormattedTextField formattedTextFieldGebinde() {
		JFormattedTextField gebeingabe = new JFormattedTextField();
		gebeingabe.setValue(null);
		gebeingabe.addPropertyChangeListener(new FieldGebinde());
		return gebeingabe;
	}
	
	class FieldGebinde implements PropertyChangeListener
	{
		public void propertyChange(PropertyChangeEvent e)
		{
			System.out.println(gebeingabe.getValue());
			if(gebeingabe.getValue()!=null)
			{
				System.out.println("ein wert wurde eingegeben");
			}
		}	
	}
	
	class FieldGebindeGewicht implements PropertyChangeListener
	{
		public void propertyChange(PropertyChangeEvent e)
		{
			System.out.println(gebgeweingabe.getValue());
			if(gebgeweingabe.getValue()!=null)
			{
				System.out.println("Ein Wert wurde eingegeben");
			}
		}
	}
}

Das Ziel ist, dass ein Ereignis ausgeführt wird, wenn das Feld verlassen wird. Sei das Verlassen durch Enter, Tab oder Mausklick. Da dafür verschiedene Listener notwendig wären, wurde wohl der PropertyChangeListener gewählt, welcher in allen drei Fällen immer auslöst. Das er auch beim Erhalt des Fokus auslöst kann ignoriert werden. Ich habe auch den DocumentListener gefunden und getestet, dieser löst jedoch bei jedem eingegebenen Zeichen aus.
Oder gibt es alternative Vorschläge wie ich das anders lösen könnte?
 

Marco13

Top Contributor
Code:
private JFormattedTextField formattedTextFieldGebindeGewicht() {
      JFormattedTextField gebgeweingabe = new JFormattedTextField();
      gebgeweingabe.setValue(null);
      gebgeweingabe.addPropertyChangeListener(new FieldGebindeGewicht());
      return gebgeweingabe;
   }
   
   private JFormattedTextField formattedTextFieldGebinde() {
      JFormattedTextField gebeingabe = new JFormattedTextField();
      gebeingabe.setValue(null);
      gebeingabe.addPropertyChangeListener(new FieldGebinde());
      return gebeingabe;
   }
ändern in
Code:
private JFormattedTextField formattedTextFieldGebindeGewicht() {
      gebgeweingabe = new JFormattedTextField();
      gebgeweingabe.setValue(null);
      gebgeweingabe.addPropertyChangeListener(new FieldGebindeGewicht());
      return gebgeweingabe;
   }
   
   private JFormattedTextField formattedTextFieldGebinde() {
      gebeingabe = new JFormattedTextField();
      gebeingabe.setValue(null);
      gebeingabe.addPropertyChangeListener(new FieldGebinde());
      return gebeingabe;
   }
 

nuely

Mitglied
ja das stimmt. Hatte ich übersehen.
Dann entsteht hier dasselbe Problem wie oben beschrieben. Auch wenn etwas eingegeben wurde, ist getValue() immer null.
 
G

Gast2

Gast
ja klar du füllst dein feld ja nie also ist es immer null...
 

Marco13

Top Contributor
Was soll denn da zurückgegeben werden? getValue liefert ja nicht den Inhalt, sondern den letzten gültigen Wert. Mit dem gebgeweingabe.setValue(null) sorgt man aber indirekt dafür, dass "kein" Wert gültig ist. Bei sowas wie
gebgeweingabe.setValue(new Integer(1));
könnte man Integers eingeben, und dann liefert getValue auch ggf. was....
 
G

Gast2

Gast
eventuell bekommst du aus deinem propertyEvent einen richtigen wert...vielleicht!!!
hast du keine getText methode oder sowas?
 

nuely

Mitglied
Hat ein wenig gedauert, aber ich musste andere Projekte etwas vorziehen. Ich hab mir das JFormattedTextField jetzt mal angeguckt und verstehe, was der Zweck des ganzen vermutlich sein sollte. Es war nur überhaupt nicht implementiert. Es waren eigentlich ganz normale TextFields. Ich werd mich jetzt mal mit den FormattedTextFields auseinander setzen und versuchen das umzusetzen, wie es anfangs gedacht war. Ich erklär das hier erstmal für erledigt und stelle bei Bedarf neue Fragen.

Danke für die Antworten.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Registrierung eines Propertychangelistener AWT, Swing, JavaFX & SWT 2
M PropertyChangeListener - JTable bei neuen Objekten updaten? AWT, Swing, JavaFX & SWT 3
M WindowEvent löst immer PropertyChangeListener aus AWT, Swing, JavaFX & SWT 9
D PropertyChangeListener Event auswertung AWT, Swing, JavaFX & SWT 7
Ham Swing PropertyChangeListener aufrufende Komponente AWT, Swing, JavaFX & SWT 5
R Problem mit PropertyChangeListener AWT, Swing, JavaFX & SWT 2
V PropertyChangeListener Problem AWT, Swing, JavaFX & SWT 4
F JFormattedTextField für kg und Währung AWT, Swing, JavaFX & SWT 6
S JFormattedTextField dezimal variabler Länge AWT, Swing, JavaFX & SWT 12
Ghostman1711 Java JFormattedTextfield MaskFormatter ohne Leerzeichen AWT, Swing, JavaFX & SWT 3
N Swing JFormattedTextField keine Werte nach Formatzuweisung AWT, Swing, JavaFX & SWT 0
M European Article Number (EAN) in JFormattedTextfield AWT, Swing, JavaFX & SWT 3
L JFormattedTextField AWT, Swing, JavaFX & SWT 3
B Swing JFormattedTextField AWT, Swing, JavaFX & SWT 4
Y JFormattedTextfield - Aktualisierung und Beschränkung AWT, Swing, JavaFX & SWT 4
V Swing Nullpointer Exception bei JFormattedTextField AWT, Swing, JavaFX & SWT 4
S Swing JFormattedTextField - bei nicht korrekter Eingabe Inhalt überschreiben AWT, Swing, JavaFX & SWT 5
S Swing JFormattedTextfield markiert nicht gesamten Inhalt AWT, Swing, JavaFX & SWT 4
C Swing Button in Textfeld (JFormattedTextField) AWT, Swing, JavaFX & SWT 7
A jformattedtextfield unsichtbar und wieder sichtbar machen AWT, Swing, JavaFX & SWT 13
C Swing JFormattedTextField + Eurobetrag AWT, Swing, JavaFX & SWT 2
E Problem mit MaskFormatter und JFormattedTextField AWT, Swing, JavaFX & SWT 3
A EventListener für JFormattedTextField AWT, Swing, JavaFX & SWT 6
B Swing Betrag mit Komma aus jformattedtextfield auslesen. AWT, Swing, JavaFX & SWT 2
E Swing JFormattedTextField Live Validierung AWT, Swing, JavaFX & SWT 4
C Swing Default Werte für JFormattedTextField und Eingaben zurücksetzen AWT, Swing, JavaFX & SWT 5
G JFormattedTextField und DefaultButton AWT, Swing, JavaFX & SWT 6
B Swing JFormattedTextField auf mehreren JPanels in einer JTabbedPane AWT, Swing, JavaFX & SWT 3
G JFormattedTextField values AWT, Swing, JavaFX & SWT 8
R JFormattedTextField AWT, Swing, JavaFX & SWT 8
D Eingabemaske im JFormattedTextField ändern AWT, Swing, JavaFX & SWT 3
D JFormattedTextfield um Grafik erweitern AWT, Swing, JavaFX & SWT 15
N JFormattedTextField erst Verlassen, wenn Eingabe korrekt AWT, Swing, JavaFX & SWT 6
G JFormattedTextField lässt sich nicht mehr leeren AWT, Swing, JavaFX & SWT 4
D Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 6
A Problem mit JFormattedTextField auslesen AWT, Swing, JavaFX & SWT 11
S JFormattedTextField und maximal 3 Stellen. AWT, Swing, JavaFX & SWT 11
M JFormattedTextField und Null-Werte AWT, Swing, JavaFX & SWT 4
E JformattedTextField, Dialog und weitere Kleinigkeiten . AWT, Swing, JavaFX & SWT 2
E Problem mit Validierende Eingabefeldern JFormattedTextField AWT, Swing, JavaFX & SWT 8
B JFormattedTextField mit DecimalFormat in ein Double AWT, Swing, JavaFX & SWT 11
C JFormattedTextField - nur bestimmte Zeichen zulassen AWT, Swing, JavaFX & SWT 3
H JFormattedTextField - Einen Preis eingeben lassen AWT, Swing, JavaFX & SWT 2
B Zeichen werden im JFormattedTextField überschrieben AWT, Swing, JavaFX & SWT 3
H JFormattedTextField AWT, Swing, JavaFX & SWT 4
W IP-Adresse mit JFormattedTextField AWT, Swing, JavaFX & SWT 5
F JFormattedTextField formatieren AWT, Swing, JavaFX & SWT 7
J [JFormattedTextField] Nur Zahlen eingebbar AWT, Swing, JavaFX & SWT 3
S [JFormattedTextField] Ja wie denn nun? AWT, Swing, JavaFX & SWT 2
G Datumseingabe mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
B Wert bei JFormattedTextField automatisch aktualisieren AWT, Swing, JavaFX & SWT 2
H Frage zu JFormattedTextField AWT, Swing, JavaFX & SWT 2
G Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 3
M Datumseingabe in ein JFormattedTextfield AWT, Swing, JavaFX & SWT 2
F Problem mit JFormattedTextField AWT, Swing, JavaFX & SWT 4
A JFormattedTextField - vertical misalignment problems... AWT, Swing, JavaFX & SWT 12

Ähnliche Java Themen

Neue Themen


Oben