如何限制JTextPane中的字符数用户类型(Java)

Bou*_*ess 2 java swing jtextpane

输入X后,我不需要输入任何字符.我需要在输入X字符后发出一声嘟嘟声.我知道在用户按下回车后如何执行此操作,但我需要在用户按Enter键之前执行此操作.我在Oracle网站上发现的方法是将DocumentSizeFilter添加到JTextPane.我不能让它在他们结束时通知用户(在他们按下回车之前它不起作用).这是我的样本.

public class EndCycleTextAreaRenderer extends JTextPane
implements TableCellRenderer {

private final int maxNumberOfCharacters = 200;

public EndCycleTextAreaRenderer() {
    StyledDocument styledDoc = this.getStyledDocument();
    AbstractDocument doc;
    doc = (AbstractDocument)styledDoc;
    doc.setDocumentFilter(new DocumentSizeFilter(maxNumberOfCharacters ));

}
Run Code Online (Sandbox Code Playgroud)

dog*_*ane 6

覆盖insertString文档的方法,JTextPane以便在达到最大值后不再插入任何字符.

例如:

JTextPane textPane = new JTextPane(new DefaultStyledDocument() {
    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if ((getLength() + str.length()) <= maxNumberOfCharacters) {
            super.insertString(offs, str, a);
        }
        else {
            Toolkit.getDefaultToolkit().beep();
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

更新:

您可以按如下方式更改课程:

public class EndCycleTextAreaRenderer extends JTextPane implements TableCellRenderer {

    private final int maxNumberOfCharacters = 200;

    public EndCycleTextAreaRenderer() {
        setStyledDocument(new DefaultStyledDocument() {
            @Override
            public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
                if ((getLength() + str.length()) <= maxNumberOfCharacters) {
                    super.insertString(offs, str, a);
                } else {
                    Toolkit.getDefaultToolkit().beep();
                }
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

  • -1用于子类化文本组件(与文档相比,甚至更简单地使用DocumentFilter) (2认同)