我正在使用BlueJ,并且有两个类。

public class mainMenu extends JFrame
{
    ArrayList<String> one=new ArrayList<String>();
    ArrayList<String> zero=new ArrayList<String>();
    public static void main(String[] args){
        mainMenu m=new mainMenu();
    }

    public mainMenu(){
        JPanel p=new JPanel();
        JTextField idOne=new JTextField(4);
        DocumentFilter fOne=new LengthFilter();
        idOne.getDocument().setDocumentFilter(fOne);
    }
}




class LengthFilter extends DocumentFilter{
    private int max=4;

    public void insertString(DocumentFilter.FilterBypass fb, int offset,String text, AttributeSet attr) throws BadLocationException {
        if (fb.getDocument().getLength() + text.length() <= max){
            fb.insertString(offset, text, attr);
        }else {
            Toolkit.getDefaultToolkit().beep();
        }
    }

    public void replace(DocumentFilter.FilterBypass fb, int offset, int length,
    String text, AttributeSet attr) throws BadLocationException {
        if (fb.getDocument().getLength() + text.length() - length <= max){
            fb.replace(offset, length, text, attr);
        }else {
            Toolkit.getDefaultToolkit().beep();
        }
    }
}


当我尝试编译第一类时,它会出现编译器错误:


  找不到符号-方法setDocumentFilter(javax.swing.text.DocumentFilter)


为什么以及如何解决此问题?

最佳答案

对于setDocumentFilter类,未定义Document。你需要

DocumentFilter filter = new LengthFilter();
((AbstractDocument)idOneTextField.getDocument()).setDocumentFilter(filter);

10-06 03:17