我的 java swing 应用程序有一个 JTextFied。我使用 PlainDocument 子类进行输入操作。
public class MaskDecimalDocument extends PlainDocument {
public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
//manipulation input code
super.insertString(0, manipulatedText, a);
}
}
用户插入一个字符,insertString方法处理该字符并将其插入到文本中。下一次操作时,光标位于文本末尾。如何将光标定位到原来的位置?
最佳答案
您可能需要考虑使用 DocumentFilter
,因为它是用于处理 Document
更改的较新 API。概念是相同的,但该类更具可重用性,因为它可以添加到任何文档
中。
阅读 Swing 教程中关于 Implementing a DocumentFilter 的部分了解更多信息。
How do I position the cursor at original place ?
当您创建自定义 DocumentFilter
类时,您需要传入使用 Document
作为参数的文本字段,并将该文本字段保存为你的类(class)。
那么 replaceSelection(...)
方法中的逻辑将类似于:
int caretPosition = textField.getCaretPosition();
super.replaceSelection(...);
textField.setCaretPosition( caretPosition );
请注意,您可能需要将 setCaretPosition(...)
方法放置在 SwingUtilities.invokeLater()
中,以确保代码在默认处理后执行设置插入符位置。
关于Java Swing - 如何从 PlainDocument 将光标定位在 JTextField 内,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41554399/