Ich habe einen Code hier machen, dass ich MDP Weblog bilden bekam. der sizefilter und der Zahlfilter. Wie mache ich ein Textfeld seinen Filter für zwei Dokumentenfilter einstellen.Wie Textfeld haben 2 Dokumentenfilter
Hier ISTHE numberfilter
import javax.swing.text.BadLocationException;
import javax.swing.text.AttributeSet;
import javax.swing.text.DocumentFilter;
public class IntFilter extends DocumentFilter {
public void insertString(DocumentFilter.FilterBypass fb, int offset,
String string, AttributeSet attr)
throws BadLocationException {
StringBuffer buffer = new StringBuffer(string);
for (int i = buffer.length() - 1; i >= 0; i--) {
char ch = buffer.charAt(i);
if (!Character.isDigit(ch)) {
buffer.deleteCharAt(i);
}
}
super.insertString(fb, offset, buffer.toString(), attr);
}
public void replace(DocumentFilter.FilterBypass fb,
int offset, int length, String string, AttributeSet attr) throws BadLocationException {
if (length > 0) fb.remove(offset, length);
insertString(fb, offset, string, attr);
}
}
dieser Code für die sizefilter ist
import java.awt.*;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.DocumentFilter;
public class SizeFilter extends DocumentFilter {
private int maxCharacters;
public SizeFilter(int maxChars) {
maxCharacters = maxChars;
}
public void insertString(FilterBypass fb, int offs, String str, AttributeSet a)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()) <= maxCharacters)
super.insertString(fb, offs, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
public void replace(FilterBypass fb, int offs, int length, String str, AttributeSet a)
throws BadLocationException {
if ((fb.getDocument().getLength() + str.length()
- length) <= maxCharacters)
super.replace(fb, offs, length, str, a);
else
Toolkit.getDefaultToolkit().beep();
}
}
Ich habe den ersten Code versucht und einige Fehler importiert. und es gibt diese einen Fehler an diesem Teil: 'filter.replace (fb, offs, Länge, a);' dies ist der Fehler: ** Methode in der Klasse ersetzt javax.swing.text.DocumentFilter kann nicht angewandt werden, zu den angegebenen Typen erforderlich: javax.swing.text.DocumentFilter.FilterBypass, int, int, java.lang.String, javax.swing.text.AttributeSet gefunden: javax.swing.text.DocumentFilter.FilterBypass, int, int, javax.print.attribute.AttributeSet ** –
Sie haben das falsche AttributSet importiert. –
jetzt, da ich die zwei Filter kombinierte, funktioniert es gerade nicht ich weiß nicht warum. aber es beschränkt irgendwie das Textfeld nur auf Zeichen und hinter dem Limit kann ich nur Zahlen eingeben –