【问题标题】:Change Input Limit Class into a Function将输入限制类更改为函数
【发布时间】:2015-03-01 05:44:35
【问题描述】:

我有一个基本类,它允许我限制在 JTextField(或与此相关的任何字段)中输入的字符数,但我想知道是否有办法将类转换为函数,以便我可以把我的“实用程序”类中的函数以及我的其他辅助函数。如果我可以将限制作为函数的参数,那将是理想的。

目前是这样称呼的:

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);
        }
    }
}

【问题讨论】:

  • 那么,你想创建一个static 方法吗?用什么签名?
  • 使用 DocumentFilter 代替 PlainDocument,您演示的方法已经过时了 10 多年
  • 是的,我想创建一个静态方法,但不确定您所说的签名是什么意思。 @MadProgrammer,我是否需要同时实现 DocumentFilter 的 insertString 和 replace 方法,是否需要先将 JTextfield 设置为 AbstractDocument ,如stackoverflow.com/questions/7527323 所示?

标签: java swing jtextfield user-input


【解决方案1】:

您可以将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; }

    // ...
}

【讨论】:

    【解决方案2】:

    变化:

    private final int charLimit = 10;
    
    InputLimit() { super(); }
    

    收件人:

    private final int charLimit = 10;
    
    InputLimit(int charLimit) { 
        super(); 
        this.charLimit = charLimit;
    }
    

    创建一个:

    textfield.setDocument(new InputLimit(15));
    

    【讨论】:

    • 这只对参数有帮助(我很感激),但仍然不能帮助我将代码变成一个函数,而不是一个类。
    • 创建一个:textfield.setDocument(new InputLimit(15));.. 这不需要方法。
    猜你喜欢
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多