使用PlainDocument在JTextField中移动插入符号

时间:2012-09-24 14:02:53

标签: java swing jtextfield caret

我正在编写一个基于JTextField的自定义控件。我的JTextField使用我自己的Document类,派生自PlainDocument,以便我可以处理覆盖insertString(...)remove(...)方法的所有用户输入。

这是问题所在。在我处理用户输入后,有时我想将插入符移动到另一个位置。有什么更好的方法呢?

默认情况下,Document将插入符号放在最后一个输入旁边。所以我试着把一个字符放到我的目标位置并立即删除它。由于某种原因,它在remove()方法中不起作用......并且代码看起来不太好:))

感谢和建议。

2 个答案:

答案 0 :(得分:2)

  • 似乎没有必要扩展PlainDocument。只需在JTextField的Document中添加DocumentListener,就可以在DocumentListener中声明的3种方法中处理用户输入
  • 使用setCaretPosition将插入符号移动到您想要的位置

答案 1 :(得分:2)

如果要控制用户输入,您实际上应该使用DocumentFilterDocumentFilter允许您在发生时拦截所有输入。然后,您可以使用JTextField.setCaretPosition(来自JTextComponent)来设置插入位置。只需将您的DocumentFilter实施内容传递给JTextField,即可为您设置插入位置。

这是Java trail for DocumentFilter。另外,example on JavaRanch