Format eines Textfeldes

Status
Nicht offen für weitere Antworten.

MSJones

Mitglied
Ich hab ein Formatted Textfield, in dem 0-5 Zahlen eigegeben werden können.
Mit untenstehender Lösung hab ich das gemacht, indem ich die Stellen einfach mit '0' vorfülle.
Ich möchte die Felder aber leer haben.
Wenn ich den Placeholder einfach raus lasse, dann wird meine Zahl, die weniger als 5 Stellen hat, gar nicht erst angenommen, d.h. beim Setzen des Fokus außerhalb des Textfeldes wird meine Eingabe wieder gelöscht.
Also im Prinzip sollen 5 Masken gleichzeitig gesetzt werden, nämlich "#", "##", "###", "####", "#####".
Kann mir da jemand behilflich sein?

Code:
DefaultFormatterFactory dff = getFormat("#####", '0');
zahlenfeld = new JFormattedTextField(dff);
zahlenfeld.setColumns(5);
xxx.add(zahlenfeld);


private DefaultFormatterFactory getFormat(String format, char placeHolder)
	{
		MaskFormatter mf;
		try
		{
			mf = new MaskFormatter(format);
			mf.setPlaceholderCharacter(placeHolder);
			return new DefaultFormatterFactory(mf);

		}
		catch (ParseException e)
		{
			e.printStackTrace();
		}
		return new DefaultFormatterFactory();
	}
 
Man könnte es so machen:
Code:
/*
 * Text_Begrenzen.java
 */
package text;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class Text_Begrenzen extends JFrame {
    public Text_Begrenzen() {
        textfield = new JTextField();
        textfield.setDocument(new LimitedText());
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        getContentPane().add(textfield, BorderLayout.NORTH);
        pack();
    }
    public static void main(String args[]) {new Text_Begrenzen().setVisible(true);}
    private JTextField textfield;
}
class LimitedText extends DefaultStyledDocument {
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if ((getLength() + str.length()) <= 5 && str.compareTo("0") >= 0 && str.compareTo("9") <= 0)
            super.insertString(offs, str, a);
        else Toolkit.getDefaultToolkit().beep();
    }
}
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben