JFormatTextField validacja

0

Witam panowie
Jak stworzyć JFormatTextField który przyjmuje tylko określone znaki
np tylko literki Aa Bb Dd

innych nie przyjmuje
Napisałem coś takiego


MaskFormatter formatter = null;
		
			try {
				formatter = new MaskFormatter("************");
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		
		formatter.setValidCharacters("AaBbCc");
 

Działa bardzo dobrze jednak ma ograniczenie do np 15 znaków :/

0

Nie ma żadnego ograniczenia na długość wprowadzanego Stringa? Jeżeli jest (np. maxLength), to:

StringBuilder sb = new StringBuilder("");
for(int i = 0;i<maxLength;i++)
{
    sb.append("*");
}
MaskFormatter formatter = new MaskFormatter(sb.toString());
0

Rozumiem
Zastanawiam się tylko czy użycie w tym przypadku MarkFormatter jest najlepszym rozwiązaniem
? też myślałem nad wykonaniem tego w ten sposób .... ale zastosowanie do tego pętli for jest raczej mało efektywne ? nie ma jakiegoś prostszego sposobu

0

Jeśli użyjesz pętli

String mask = "";
for(int i = 0;i<maxLength;i++)
{
     mask+="*";
}

to rzeczywiście będzie nieefektywne.

0

Napisałem coś takiego :

 class PatternFilter extends DocumentFilter {

	private Pattern pattern;
	public PatternFilter(String pat) {
		pattern = Pattern.compile(pat);
	}

	public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr) throws BadLocationException {

		String newStr = fb.getDocument().getText(0, fb.getDocument().getLength()) + string;
		Matcher m = pattern.matcher(newStr);
		if (m.matches()) {
			super.insertString(fb, offset, string, attr);
		} else {
		}
	}

	public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attr) throws BadLocationException {

		if (length > 0)
			fb.remove(offset, length);
		insertString(fb, offset, string, attr);
	}

Następnie stworzyłem pattern

String pattern = "(A|a|B|b)+";

i dołączyłem do buttona :

 
JTextField formattedTextFieldMapInstruction = new JTextField();
		AbstractDocument document = (AbstractDocument) formattedTextFieldMapInstruction.getDocument();
		document.setDocumentFilter(new PatternFilter(pattern));

1 użytkowników online, w tym zalogowanych: 0, gości: 1