Problem mit einem DocumentFilter

Status
Nicht offen für weitere Antworten.

Alex_winf01

Top Contributor
Hallo liebe Forengemeinde,

folgender Code liegt vor:

Java:
int MAX = 5;
JTextField textfield = new JTextField(MAX);
((AbstractDocument) textfield.getDocument()).setDocumentFilter(new DocumentSizeFilter(MAX, "[0-9]."));

Java:
import javax.print.*;
import javax.swing.text.*;
import java.awt.*;

public class DocumentSizeFilter extends DocumentFilter
{
	private final int maxCharacters;
	private final String pattern;
	
	public DocumentSizeFilter(final int maxChars, final String pattern)
	{
		maxCharacters = maxChars;
		this.pattern = pattern;
	}
	public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a) throws BadLocationException
	{
		if(str.matches(pattern) && (fb.getDocument().getLength() + str.length() - length) <= maxCharacters)
		{
			super.replace(fb, offs, length, str, a);
		}
		else
		{
			Toolkit.getDefaultToolkit().beep();
		}
	}
}

Hintergrund:

Ich habe ein Textfeld in der folgende Eingabemöglichkeiten gegeben sind: 5.0 oder 55.0 oder 555.0

Nun kann ich aber gar nichts mehr in das Textfeld reinschreiben. Was mache ich falsch?
 
S

SlaterB

Gast
das Pattern verlangt mindestens 2 Zeichen, daher kann man vielleicht das erste Zeichen nicht eintippen und kommt so zu gar nix?
ändere das Pattern

. steht übrigens für beliebige Zeichen, \\. für das Zeichen Punkt
 

Alex_winf01

Top Contributor
@ SlaterB

vielen Dank schon mal für Deine Antwort. Wo genau soll ich das Pattern wie ändern? Danke schon mal für Deine Antwort.
 
S

SlaterB

Gast
danke für deine erneute Frage, leider weiß ich nicht was dein Pattern machen soll, danke für deine erneute Frage (sorry ;) )

mit 5.0 oder 55.0 oder 555.0 hat dein bisheriges Pattern anscheinend gar nix zu tun
 

Alex_winf01

Top Contributor
@ SlaterB

sorry, hab mich unklar ausgedrückt. Dieses Textfeld soll maximal 5 Zeichen aufnehmen. Das kann in der Form 5.0, 55.0 oder 555.0 sein. Es sind also maximal 3 Zeichen vor dem Punkt und maximal 1 Zeichen nach dem Punkt. Und es soll nicht über JFormattedTextfield gehen. Und es dürfen nur Zahlen eingegeben werden. Der Punkt ist erlaubt. Wie würdest Du das umsetzen?
 

KrokoDiehl

Top Contributor
Wenn ich mich mal einmischen darf... ;)

Mit dem DocumentFilter kannst du denke ich nicht das Format deiner Eingabe abprüfen, zumindest nicht so einfach über ein Pattern, denn solange der Benutzer tippt kommt jedes Zeichen einzeln durch den Filter und es wird nie dem Pattern entsprechen. Erst das Resultat kann geprüft werden (--> InputVerifier).
Um es im Filter abzuprüfen müsstest du wohl den Punkt suchen und schauen wie viele Zeichen davor, bzw. danach sind.
 
S

SlaterB

Gast
oder ein Pattern, welches das Endergebnis akzeptiert sowie einen Teil davon,
in Richtung von

Java:
public class Test
{
    public static void main(String[] args)
        throws Exception
    {
        String p = "5{0,3}\\.?0?";
        System.out.println("4".matches(p));
        System.out.println("5".matches(p));
        System.out.println("5.".matches(p));
        System.out.println("5.0".matches(p));
        System.out.println("555".matches(p));
        System.out.println("5555".matches(p));
        System.out.println("555.0".matches(p));
    }
}
 

Alex_winf01

Top Contributor
@ SlaterB

danke schon mal für Deine Antwort. Nur habe ich noch folgende Verständnisfrage:

Java:
String p = "5{0,3}\\.?0?";

Warum liefert mir
Java:
meinWertTextfeld.matches(p));
ein false, wenn ich 5.0 eingebe? Diese eingabe ist zulässig. Oder muss ich für jede Möglichkeit ein eigenes Pattern anlegen?
 
S

SlaterB

Gast
..

5.0 ist doch sogar in meinem Testprogramm drin und ergibt true,
vielleicht sind Leerzeichen im String, gib diesen vor dem match Zeichen für Zeichen aus

vollständiges Testprogramm ansonsten
 

Alex_winf01

Top Contributor
@ SlaterB

Ich habe mir den eingegebenen text über
Java:
meintextfeld.getText();
ausgeben lassen. Ergebnis: 5.0. Dann habe ich mir die Länge ausgeben lassen. Ergebnis: Länge = 3. Dann habe ich mir jedes einzelne Zeichen ausgeben lassen. Ergebnis sieht wie folgt aus:
5

.
0

Wie kommt es, dass da ein "Leerstring" drinn ist, obwohl ich keinen eingegeben habe und die Länge = 3 ist?
 
S

SlaterB

Gast
caste jedes Zeichen, jeden char auf int und gib diese Wert aus,
vergleiche das mit den drei chars von normal vorgegebenen "5.0" als int ausgegeben,

es gibt 65000 verschiedene Chars, da sind manche Überraschungen dabei
 

Alex_winf01

Top Contributor
@ SlaterB

ALSO, jetzt wirt es komisch. Ich gebe ein: 5.0. Länge ist 3, dann lasse ich mir die einzelnen Zeichen und den char als int ausgeben. Ausgabe:

Zeichen: 5 Zahl: 53
Zeichen: . Zahl: 46
Zeichen: 0 Zahl: 48

Das
Java:
meinWertTextfeld.matches(p));
liefert mir aber false. WARUM?
 
S

SlaterB

Gast
diese Ausgabe widerspricht der obigen mit dem Leerzeichen oder zumindest Zeilenumbruch zwischen 5 und .

bei mir kommt übrigens immer nur ein Zeichen im Filter an
Java:
public class TestGUI
    extends JFrame
{

    public TestGUI()
    {
        String p = "5{0,3}\\.?0?";
        int MAX = 5;
        JTextField textfield = new JTextField(MAX);
        ((AbstractDocument)textfield.getDocument()).setDocumentFilter(new DocumentSizeFilter(MAX, p));
        add(textfield);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(200, 300);
        setVisible(true);
    }

    public static void main(String[] args)
    {
        new TestGUI();
    }
}


class DocumentSizeFilter
    extends DocumentFilter
{
    private final int maxCharacters;
    private final String pattern;

    public DocumentSizeFilter(final int maxChars, final String pattern)
    {
        maxCharacters = maxChars;
        this.pattern = pattern;
    }

    public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
        throws BadLocationException
    {
        System.out.println("str: " + str + ", " + str.matches(pattern));
        if (str.matches(pattern) && (fb.getDocument().getLength() + str.length() - length) <= maxCharacters)
        {
            super.replace(fb, offs, length, str, a);
        }
        else
        {
            Toolkit.getDefaultToolkit().beep();
        }
    }
}
str: 5, true
str: ., true
str: 0, true
str: 5, true
str: 5, true
str: ., true
str: 0, true
str: 5, true
str: 5, true
str: 5, true
str: 5, true
str: 5, true
str: 5, true
str: 5, true
str: ., true
str: 0, true
str: 0, true
str: 0, true

insofern akzeptiert das Textfeld am Ende auch 5.000,
dieser Filter scheint generell nicht geeignet,
dein Problem kann ich ohne Testprogramm und Vorgabe der Eingabe oder genaues Programmlog oder Screenshots oder alles zusammen nicht nachvollziehen,
bei mir gehts
 

Alex_winf01

Top Contributor
@ SlaterB

hab den Fehler. Wenn man statt
Java:
String p = "5{0,3}\\.?0?";
folgendes schreibt:
Java:
String p = "5(0,3)\\.?0?";
kann es auch nicht funktionieren. Danke für Deine Hilfe.
 

Alex_winf01

Top Contributor
@ SlaterB

ich habe zu dem Thema noch eine Nachfrage: Warum wird bei Eingabe 0.0 und 1.0 false zurückgeliefert? Diese Eingabe ist genauso gültig, als wenn ich 5.0 eingebe. Danke schon mal für Deine Antwort.
 
S

SlaterB

Gast
nach dem Pattern nicht,
5 steht nur für 5, weder für die 1, noch die 0, noch jede andere Ziffer,
\\d oder so für beliebige Ziffern, siehe API

oder [0-9]
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
7 JavaFX Problem beim Zeichnen eines Dreiecks in einem GUI AWT, Swing, JavaFX & SWT 6
F SWT Problem mit Tabelle und Combobox in einem Wizard AWT, Swing, JavaFX & SWT 5
P Problem beim erstellen eines JPanel in einem JFrame AWT, Swing, JavaFX & SWT 7
D Swing Problem mit Scrollbars in einem JPanel eines JWindows AWT, Swing, JavaFX & SWT 4
F kleines problem beim suchen in einem String AWT, Swing, JavaFX & SWT 15
A Problem mit einem ActionListener AWT, Swing, JavaFX & SWT 5
B Problem bei der Erstellung einer Bilddatei aus einem JPanel AWT, Swing, JavaFX & SWT 16
J Problem beim Multi-Threading mit einem JDialog AWT, Swing, JavaFX & SWT 2
S Problem mit dem Zeichnen einer Linie auf einem JPanel AWT, Swing, JavaFX & SWT 30
B Problem mit ImageIcons in einem Jar-File AWT, Swing, JavaFX & SWT 7
G Problem mit Swing bei einem Sudoku Spiel AWT, Swing, JavaFX & SWT 2
Juelin Problem mit TextField.requestFocus(); AWT, Swing, JavaFX & SWT 17
Juelin Problem beim Laden Controller AWT, Swing, JavaFX & SWT 2
G Problem mit der Anzeige von jLabel. Unlesbar wenn der Text geändert wird. AWT, Swing, JavaFX & SWT 28
H 2D-Grafik Problem mit Paint AWT, Swing, JavaFX & SWT 1
S Layout - Problem AWT, Swing, JavaFX & SWT 1
Tassos JavaFX/Problem mit der Maussteuerung in Stackpane AWT, Swing, JavaFX & SWT 7
sserio Java Fx - Problem AWT, Swing, JavaFX & SWT 3
A Problem Spiel auf Panel der GUI zu bringen AWT, Swing, JavaFX & SWT 1
A JavaFX Controller Problem AWT, Swing, JavaFX & SWT 1
TheWhiteShadow JavaFX ListView Problem beim Entfernen von Elementen AWT, Swing, JavaFX & SWT 1
E LayoutManager Welcher Layout-Mix löst mein Problem? AWT, Swing, JavaFX & SWT 3
Umb3rus JavaFX Problem mit PropertyValueFactory: can not read from unreadable property AWT, Swing, JavaFX & SWT 1
T Problem mit paintComponent() AWT, Swing, JavaFX & SWT 17
AmsananKING Java Menü-Problem AWT, Swing, JavaFX & SWT 1
K JavaFX Resizing-Problem beim BorderLayout (Center Component) beim Arbeiten mit mehreren FXMLs AWT, Swing, JavaFX & SWT 2
G Instance OF Problem AWT, Swing, JavaFX & SWT 9
FrittenFritze Ein Problem mit der CSSBox, die Größe wird nicht angepasst AWT, Swing, JavaFX & SWT 5
M Problem mit dem Anzeigen von Frames im Vordergrund AWT, Swing, JavaFX & SWT 5
Badebay Problem mit JButton AWT, Swing, JavaFX & SWT 2
newJavaGeek Grid-Layout problem AWT, Swing, JavaFX & SWT 7
J JavaFX Löschen im Tabelview macht Problem AWT, Swing, JavaFX & SWT 15
JavaTalksToMe JavaFx ExekutorService Problem AWT, Swing, JavaFX & SWT 2
Zrebna Problem bei Eventhandling (Value soll nach jedem erneutem Klick gelöscht werden) AWT, Swing, JavaFX & SWT 4
B Problem mit JavaFX AWT, Swing, JavaFX & SWT 5
J css Problem AWT, Swing, JavaFX & SWT 5
B JavaFX habe mein Problem fett markiert AWT, Swing, JavaFX & SWT 2
A Swing Filter-Problem AWT, Swing, JavaFX & SWT 1
temi JavaFX Problem mit IntelliJ und JavaFx 11 unter XUbuntu AWT, Swing, JavaFX & SWT 3
L Java FX Problem mit Ubuntu 18 und JavaFx AWT, Swing, JavaFX & SWT 27
H JTable TableCellEditor-Problem AWT, Swing, JavaFX & SWT 0
kodela Swing Problem mit Warten-Dialog AWT, Swing, JavaFX & SWT 16
B JavaFx Scene Builder Problem AWT, Swing, JavaFX & SWT 2
B [Problem] Java öffnet Word-Datein nicht AWT, Swing, JavaFX & SWT 14
T DataBinding Problem AWT, Swing, JavaFX & SWT 5
Blender3D Problem mit € Symbol Font Gotham Windows 10 Swing AWT, Swing, JavaFX & SWT 11
T Problem mit JTable Sortierung AWT, Swing, JavaFX & SWT 2
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 15
J Problem mit Platfrom run later AWT, Swing, JavaFX & SWT 0
D Swing SwingUtils / Thread Problem AWT, Swing, JavaFX & SWT 3
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
T Swing Problem mit Datum und FormattedTextField AWT, Swing, JavaFX & SWT 2
S AWT Java print dialog Problem AWT, Swing, JavaFX & SWT 0
olfibits JavaFX Problem mit HTMLEditor AWT, Swing, JavaFX & SWT 0
W SWT hover-background-problem with first column in TreeViewer AWT, Swing, JavaFX & SWT 0
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
Mario1409 Swing JTextArea scroll Problem AWT, Swing, JavaFX & SWT 0
N Swing Problem mit loop AWT, Swing, JavaFX & SWT 2
S Swing Problem mit Button und ActionListener AWT, Swing, JavaFX & SWT 5
S Swing & Clean und build Problem AWT, Swing, JavaFX & SWT 12
S JLabel setText() Problem AWT, Swing, JavaFX & SWT 6
I 2D-Grafik Problem beim Ändern der Farbe eine 2d Objekts AWT, Swing, JavaFX & SWT 3
G Swing Splitpane Problem AWT, Swing, JavaFX & SWT 1
F Problem mit der FXML Rectangle Shape AWT, Swing, JavaFX & SWT 2
N JavaFX Stranges Problem mit der Autoscroll-Eigenschaft von Textareas AWT, Swing, JavaFX & SWT 0
E Java FX FXML Problem mit html Scriptausführung AWT, Swing, JavaFX & SWT 2
J JavaFX Intersect Problem mit Shapes AWT, Swing, JavaFX & SWT 10
R JavaFX MediaPlayer AVI-Problem AWT, Swing, JavaFX & SWT 1
M Swing Problem mit ListCellRenderer AWT, Swing, JavaFX & SWT 7
D Problem mit JTable AWT, Swing, JavaFX & SWT 1
F GUI Auflösung ändern - Koordianten und Proportions Problem AWT, Swing, JavaFX & SWT 21
J Problem mit Button darstellung AWT, Swing, JavaFX & SWT 23
M Problem mit Layoutmanagern... Hilfe wäre sehr nett. AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Problem mit Variablen AWT, Swing, JavaFX & SWT 4
M Swing AttributiveCellTableModel addRow() Problem AWT, Swing, JavaFX & SWT 1
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
N JavaFX Problem mit table multiple selection AWT, Swing, JavaFX & SWT 5
K CheckBox Problem AWT, Swing, JavaFX & SWT 5
Grevak DisplayMode Problem seit Windows 10 AWT, Swing, JavaFX & SWT 2
S Swing Eigene JComboBox Problem! AWT, Swing, JavaFX & SWT 1
B Swing Problem mit Bildpfad AWT, Swing, JavaFX & SWT 4
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
V Graphics g - drawOval problem mit background AWT, Swing, JavaFX & SWT 1
C AWT Problem mit Protokol Fenster AWT, Swing, JavaFX & SWT 0
M Swing pack() Problem mit Taskleiste AWT, Swing, JavaFX & SWT 4
N Swing Choice- Problem! AWT, Swing, JavaFX & SWT 8
Q "AWT-EventQueue-0" Exception Problem AWT, Swing, JavaFX & SWT 4
D jButton Problem, ein Rieser Button bedeckt das ganze frame AWT, Swing, JavaFX & SWT 1
A Problem: repaint() - Schleife AWT, Swing, JavaFX & SWT 3
J Anfänger GUI Problem bei der Ausführung eines sehr einfachen Programms AWT, Swing, JavaFX & SWT 2
P AWT Problem mit Platzierung (GridBagLayout) AWT, Swing, JavaFX & SWT 2
N Swing JTree Problem beim erstellen der Knoten AWT, Swing, JavaFX & SWT 0
N Swing CardLayout: Problem beim Wechsel zwischen den JPanels AWT, Swing, JavaFX & SWT 3
A Mini-Menu-Schriften. Ein Problem bei hohen DPI Zahlen AWT, Swing, JavaFX & SWT 2
Z Canvas in Frame einfügen. Problem mit 4-Gewinnt AWT, Swing, JavaFX & SWT 1
C Thread-/ Simulations- Problem AWT, Swing, JavaFX & SWT 18
G Swing Setvisible problem AWT, Swing, JavaFX & SWT 1
J JTabbedPane: close Button Problem AWT, Swing, JavaFX & SWT 2
Tom299 JavaFX -> fxmlLoader -> getResourceAsStream Problem AWT, Swing, JavaFX & SWT 1
T Problem: ComboBox und addItem AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen


Oben