Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将输入限制类更改为函数_Java_Swing_Jtextfield_User Input - Fatal编程技术网

Java 将输入限制类更改为函数

Java 将输入限制类更改为函数,java,swing,jtextfield,user-input,Java,Swing,Jtextfield,User Input,我有一个基本类,它允许我限制在JTextField(或任何相关字段)中输入的字符数,但我想知道是否有办法将该类转换为函数,这样我就可以将该函数与其他助手函数一起放入我的“Utilities”类中。如果我能把极限作为函数的一个参数,那就太理想了 目前称之为: textfield.setDocument(new InputLimit()); textfield.setDocument(Utilities.setInputLimit(10)); 我想这样称呼它: textfield.setDocu

我有一个基本类,它允许我限制在JTextField(或任何相关字段)中输入的字符数,但我想知道是否有办法将该类转换为函数,这样我就可以将该函数与其他助手函数一起放入我的“Utilities”类中。如果我能把极限作为函数的一个参数,那就太理想了

目前称之为:

textfield.setDocument(new InputLimit());
textfield.setDocument(Utilities.setInputLimit(10));
我想这样称呼它:

textfield.setDocument(new InputLimit());
textfield.setDocument(Utilities.setInputLimit(10));
我的班级如下:

public class InputLimit extends PlainDocument {

    private final int charLimit = 10;

    InputLimit() {
        super();
    }

    public void insertString(int offset, String str,
            AttributeSet attr) throws BadLocationException {
        if (str == null) {
            return;
        }

        if ((getLength() + str.length()) <= charLimit) {
            super.insertString(offset, str, attr);
        }
    }
}
公共类InputLimit扩展了明文{
私人最终int字符限制=10;
输入限制(){
超级();
}
public void insertString(int offset,String str,
AttributeSet attr)引发BadLocationException{
如果(str==null){
返回;
}

如果((getLength()+str.length())您可以将
charLimit
作为构造函数参数传递,如下所示

textfield.setDocument(new InputLimit(10));
只需在类中添加以下构造函数

public class InputLimit extends PlainDocument {

    private final int charLimit = 10;

    // Keep this if you want a no-arg constructor too
    InputLimit() { super(); }

    // compiler will auto add the super() call for you
    public InputLimit(int limit) { this.charLimit = limit; }

    // ...
}
更改:

private final int charLimit = 10;

InputLimit() { super(); }
致:

要创建一个:

textfield.setDocument(new InputLimit(15));

那么,您想创建一个
静态
方法?使用什么签名?使用DocumentFilter而不是PlainDocument,您演示的方法已经过时超过10年了。是的,我想创建一个静态方法,但不确定您所说的签名是什么意思。@MadProgrammer,我需要实现insertString和replace meth吗ods的DocumentFilter,我是否需要首先将JTextfield作为抽象文档进行装箱,如图所示?检查这只对参数有帮助(我很感激),但仍然不能帮助我将代码变成函数,而不是类。要创建一个:
textfield.setDocument(新的InputLimit(15));
。这不需要方法。