2009-03-04 41 views
3

Ich habe ein Textfeld, das mit Integer-Variable gebunden ist. Wenn Benutzer also Zahl in dieses Feld eingibt, konvertiert der Bindungsmechanismus Text automatisch in Integer und setzt diesen Wert in var. Das Problem besteht darin, dass der Bindemechanismus nur Werte konvertiert, da der Benutzer Text in das Textfeld eingibt. Wenn der Benutzer einige Buchstaben in das Textfeld eingibt, wird die Bindung nicht aktiviert, da innerhalb des Textfelds kein zulässiger Wert vorhanden ist. Was ich in einer solchen Situation benötigen würde, muss die Bindung eine Änderung mit Nullwert auslösen, also habe ich null in meinem Integer var.Java-Bindung JTextField -> java.lang.Integer Problem

Wenn also der Benutzer dieses Feld leer lassen würde oder etwas, das keine Zahl ist, muss die Bindung die Nullwert-Propagierung auslösen; Ereignis nicht ignorieren ... Wie kann ich das tun, ohne Ereignisse im Textfeld zu programmieren?

Kann Java-Binding sein Standardverhalten ändern?

Antwort

0

Neben dem Ändern des Verhaltens des Bindungsmechanismus können Sie einen Formatierer in das TextField einfügen, das nur Zahlen akzeptiert. Sie müssen dafür javax.swing.text.DefaultFormatter erweitern. Und Sie würden dann ein JFormattedTextField anstelle eines normalen JTextField verwenden.

Das Ergebnis wäre, dass Sie nur eine gültige Eingabe in Ihrem Textfeld erhalten und Sie nichts aus falschen Werten machen müssen.

+0

Nun, das würde funktionieren, bis Benutzer das letzte Zeichen im Textfeld löscht, Integer würde dann im letzten legalen Zustand bleiben, wäre nicht null –

1

Swing-Unterstützung für eingeschränkte Texteingabe ist erschreckend. JFormattedTextField wird Ihnen eine äußerst miserable Benutzererfahrung geben. Wie bei den meisten interessanten Swing-Arbeiten, ignorieren Sie die JComponent und gehen Sie für das Modell. In diesem Fall Document, insbesondere DocumentFilter.

Wie es passiert, habe ich eine einfache Swing-Anwendung, die Textfelder beschränkt auf Ganzzahlen verwendet, die ich zuvor vorbereitet. Description.Source (siehe insbesondere createNumberDocument).