JFormattedTextField => Maske macht Probleme

Akeshihiro

Erfahrenes Mitglied
Erstmal der Code, der das Textfeld erstellt:
Code:
portTextField = new JFormattedTextField(new MaskFormatter("#####"));

So, wie man sieht, sollen fünf Zahlen eingegeben werden. In dieses Textfeld soll der User den Port eingeben, über den eine Netwerkverbindung hergestellt werden soll. Das Problem ist aber, dass Ports nicht zwangsläufig fünfstellig sein müssen und da ist auch das Problem. Wenn man nicht genau fünf Zahlen eingibt und das Textfeld den Fokus verliert, dann wird der Inhalt gelöscht. Ich habe im Moment einen Umweg reingebaut, nämlich:
Code:
portTextField.setValue("00000");

So, nun sind da fünf Nullen und jeder noch so dumme Depp kann das sehen. Wenn man einen Port eingeben will, z.B. 80, dann würde man die vorletzte Null ändern und man hätte 00080. Das ist aber Quark. Es wäre schöner, wenn auch Werte akzeptiert würden, die nicht fünfstellig sind.

Hat jemand einen Lösungvorschlag?

---------------------------------------------------------------------------------------------------------------------------------------------------------------------
EDIT:
So, wer lange genug suchet, der auch was findet xD

Ich hab da nach stundenlanger Sucherei doch noch was gefunden und für den Fall, dass jemand anderes ein ähnliches Problem hat oder mal haben sollte, poste ich meinen angepassten Code:

Java:
JTextField portTextField = new JTextField();
/*
 * Das Textfeld soll nur Zahlen zulassen und als Maximum soll
 * maximal eine fünfstellige Zahl im Textfeld stehen.
 */
portTextField.setDocument(new PlainDocument() {
	private static final long serialVersionUID = 1L;

	public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
		// Prüfen, ob bereits 5 Zeichen drin stehen
		if(this.getLength() >= 5) return;

		// Prüfen, ob die einzufügenden Zeichen Zahlen sind
		for(int i = 0; i < str.length(); i++) {
			if(!Character.isDigit(str.charAt(i))) return;
		}

		// Zahl(en) einfügen
		super.insertString(offs, str, a);
	}
});
Nun habe ich halt ein ganz normales JTextField genommen und ein abgeleitetes Document-Objekt übergeben, das die insertString()-Methode überlagert.

Trotzdem danke an alle, die sich den Kopf zerbrochen haben ^^
 
Zuletzt bearbeitet:
Zurück