Как реализовать проверку символов в JTextField?

#java #swing #user-interface #jtextfield

#java #качать #пользовательский интерфейс #jtextfield

Вопрос:

Как реализовать проверку символа в JTextField? Я хочу видеть в своих JTextField единственных цифрах. Что я должен делать?

Ответ №1:

Используйте JFormattedTextField или DocumentFilter.

Ответ №2:

NumberOnlyFilter.java:

 import javax.swing.*;
import javax.swing.text.*;
import java.util.regex.*;
public class NumberOnlyFilter extends DocumentFilter
{

    public void insertString(DocumentFilter.FilterBypass fb, int offset, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.insert(offset, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.insertString(offset, text, attr);
    }
    public void replace(DocumentFilter.FilterBypass fb, int offset, int length, String text, AttributeSet attr) throws BadLocationException
    {
        StringBuilder sb = new StringBuilder();
        sb.append(fb.getDocument().getText(0, fb.getDocument().getLength()));
        sb.replace(offset, offset   length, text);
        if(!containsOnlyNumbers(sb.toString())) return;
        fb.replace(offset, length, text, attr);
    }

    /**
     * This method checks if a String contains only numbers
     */
    public boolean containsOnlyNumbers(String text)
    {
        Pattern pattern = Pattern.compile("[\d]");
        Matcher matcher = pattern.matcher(text);
        boolean isMatch = matcher.matches();
        return isMatch;
    }

}
 

и тогда вы можете использовать его как:

 ((AbstractDocument)yourTxtField.getDocument()).setDocumentFilter(new NumberOnlyFilter());