Swing JFormattedTextField

birtprofi

Mitglied
Hallo zusammen,

bitte um kurze Hilfe. Ich habe Datenbankfelder im Format "float".
Wenn ich in meiner Gui ein "JTextField" verwende, dann werden die Einträge korrekt in meiner Datenbank abgespeichert.
Wenn ich aber aufgrund der Formattierung das "JFormattedTextField" verwende und das Format #0.00 hinterlege, dann bekomme ich folgende Fehlermeldung beim Speichern:
(das Format hinterlege ich mit dem Netbeans-Gui Designer)

Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Cannot cast java.lang.Long to java.lang.Double
       at java.lang.Class.cast(Class.java:3005)
       at org.jdesktop.beansbinding.Binding.convertReverse(Binding.java:1321)
       at org.jdesktop.beansbinding.Binding.getTargetValueForSource(Binding.java:909)
       at org.jdesktop.beansbinding.Binding.saveUnmanaged(Binding.java:1268)
       at org.jdesktop.beansbinding.Binding.save(Binding.java:1254)


Bin helft mir als Neuling da weiter. Also im Prinzip möchte ich die Zahlenwerte korrekt formattiert angezeigt haben. Also nicht einmal 3, dann 2 oder gar keine Kommastelle.

Noch wäre es kein Problem, das Format in der Datenbank zu ändern, bzw. wieder auf JTextField umzustellen. Bitte um Info, wie ich dieses Problem lösen kann.
vielen Dank.
lg
 

Michael...

Top Contributor
Verwendest Du so etwas?
Java:
JFormattedTextField textField = new JFormattedTextField(new DecimalFormat("0.##"));
Wo tritt der Fehler auf? Beim Auslesen des Textfeldes? Wie schaut der Code dazu aus?
Wie kommt da Long ins Spiel?
 

birtprofi

Mitglied
Hallo,

mit diesen Code bekomme ich den Fehler, und zwar sobald ich das Feld verlasse, also noch bevor ich auf Speichern klicke:
Code:
jFormattedTextField15 = new javax.swing.JFormattedTextField();
jFormattedTextField15.setFormatterFactory(new javax.swing.text.DefaultFormatterFactory(new javax.swing.text.NumberFormatter()));
jFormattedTextField15.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, detailTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.refLinseReAchse}"), jFormattedTextField15, org.jdesktop.beansbinding.BeanProperty.create("value"));
bindingGroup.addBinding(binding);

wenn ich anstatt dessen nur ein JTextField verwende dann funktionierts. Dieser Code:
Code:
jTextField9 = new javax.swing.JTextField();


org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, detailTable, org.jdesktop.beansbinding.ELProperty.create("${selectedElement.refLinseLiAchse}"), jTextField9, org.jdesktop.beansbinding.BeanProperty.create("text"));
bindingGroup.addBinding(binding);

Kann es eventuell damit zu tun haben, das mein Datenbankfeld das Format "float" aufweist und bei meiner entity class double hinterlegt ist?
Code:
    @Column(name = "REF_LINSE_LI_BC")
    private Double refLinseLiBc;


Hier nochmals der gesamte Fehlercode, sobald ich aus dem FormattedTextField springe:
Code:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: Cannot cast java.lang.Long to java.lang.Double
	at java.lang.Class.cast(Class.java:3005)
	at org.jdesktop.beansbinding.Binding.convertReverse(Binding.java:1321)
	at org.jdesktop.beansbinding.Binding.getTargetValueForSource(Binding.java:909)
	at org.jdesktop.beansbinding.Binding.saveUnmanaged(Binding.java:1268)
	at org.jdesktop.beansbinding.Binding.save(Binding.java:1254)
	at org.jdesktop.beansbinding.AutoBinding.trySaveThenRefresh(AutoBinding.java:176)
	at org.jdesktop.beansbinding.AutoBinding.targetChangedImpl(AutoBinding.java:249)
	at org.jdesktop.beansbinding.Binding.targetChanged(Binding.java:1433)
	at org.jdesktop.beansbinding.Binding.access$1300(Binding.java:38)
	at org.jdesktop.beansbinding.Binding$PSL.propertyStateChanged(Binding.java:1620)
	at org.jdesktop.beansbinding.PropertyHelper.firePropertyStateChange(PropertyHelper.java:212)
	at org.jdesktop.beansbinding.BeanProperty.notifyListeners(BeanProperty.java:712)
	at org.jdesktop.beansbinding.BeanProperty.access$1000(BeanProperty.java:143)
	at org.jdesktop.beansbinding.BeanProperty$SourceEntry.cachedValueChanged(BeanProperty.java:369)
	at org.jdesktop.beansbinding.BeanProperty$SourceEntry.propertyValueChanged(BeanProperty.java:409)
	at org.jdesktop.beansbinding.BeanProperty$SourceEntry.propertyChange(BeanProperty.java:414)
	at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
	at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
	at java.awt.Component.firePropertyChange(Component.java:8382)
	at javax.swing.JFormattedTextField.setValue(JFormattedTextField.java:799)
	at javax.swing.JFormattedTextField.commitEdit(JFormattedTextField.java:530)
	at javax.swing.JFormattedTextField$FocusLostHandler.run(JFormattedTextField.java:649)
	at javax.swing.JFormattedTextField.processFocusEvent(JFormattedTextField.java:631)
	at java.awt.Component.processEvent(Component.java:6261)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1893)
	at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:937)
	at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:611)
	at java.awt.Component.dispatchEventImpl(Component.java:4731)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:713)
	at java.awt.EventQueue.access$000(EventQueue.java:104)
	at java.awt.EventQueue$3.run(EventQueue.java:672)
	at java.awt.EventQueue$3.run(EventQueue.java:670)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:686)
	at java.awt.EventQueue$4.run(EventQueue.java:684)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:683)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
 

birtprofi

Mitglied
Ich möchte dieses Topic nochmals aufgreifen und etwas erweitern. Zu meinem Problem mit jFormattedTextField:
Der Fehler tritt auf, wenn ich in mein Feld nur eine "ganze Zahl" oder eine "Zahl mit ." eingebe. Also z.B. "1" oder auch "1,00" oder "1.3". Wenn ich "1,01" oder "1,3" eingebe dann kommt kein Fehler und es wird ordnungsgemäß abgespeichert.

Meine Frage: wie kann ich das Feld formattieren, dass er auch 1 bzw. 1,0 akzeptiert? Wahrscheinlich mache ich mit meinem Datentyp etwas falsch oder?

Bitte um Hilfe.

Danke.
lg
 

bERt0r

Top Contributor
MMn ist das JFormattedTextfield nicht ganz optimal implementiert. Für deinen Fall (und viele andere) ist die Formatierung einfach viel zu starr sodass man mit einem normalen Textfield mit DocumentListener, der den Text mit einem Regulären Ausdruck vergleicht, besser bedient.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
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
N PropertyChangeListener an JFormattedTextField AWT, Swing, JavaFX & SWT 7
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


Oben