在实现DocumentFilter时输入密钥不起作用

时间:2011-12-09 17:07:56

标签: java swing jtextpane documentfilter

我已经通过继承orignal DocumentFilter类并覆盖它的insertreplace方法来实现文档过滤器。它响应除 Enter 键之外的所有键。我的意思是,当我按 Enter 时,它应该转到我JTextPane的下一行,但它没有这样做。那么如何让我的Enter密钥正常工作呢?

代码

class UrduFilter extends DocumentFilter {
//My urdu filter overriding insertString and replace
    char urduChar;
    String urduString;

    public void insertString(DocumentFilter.FilterByPass fb, int offset,
            String text, AttributeSet attr) throws BadLocationException {
        System.out.println("\n" + text);
        urduChar = Translate.translateToUrdu(text.charAt(0));
        urduString = Character.toString(urduChar);
        fb.insertString(offset, urduString, attr);
    }

    //no need to override remove(): inherited version allows all removals

    public void replace(DocumentFilter.FilterByPass fb, int offset, int length, 
            String text, AttributeSet attr) throws BadLocationException {
        urduChar = Translate.translateToUrdu(text.charAt(0));
        System.out.println(text + " ... " + text.charAt(0));
        urduString = Character.toString(urduChar);
        fb.replace(offset, length, urduString, attr);
    }
}

感谢。

3 个答案:

答案 0 :(得分:3)

Translate.translateToUrdu(char)对输入键字符(13)的作用是什么? 这似乎是问题,因为你说你没有使用ActionListener

答案 1 :(得分:3)

  

我的意思是如何使用keyListener或actionListener使插入符号移动到下一行?

默认情况下,当按下Enter键时,会在文档中插入换行符。

如果你不喜欢这种行为,那么你需要用你自己的自定义动作替换默认动作,将Caret放在下一行的开头。

阅读Key Bindings,了解有关如何执行此操作的详细信息。当您创建自定义操作时,您应该能够使用Text Utilities类来帮助您将Carat放在下一行。

答案 2 :(得分:-2)

尝试使用addKeyListener()并手动处理Enter键