Java Swing - 如何从 PlainDocument 将光标定位在 JTextField 内

标签 java swing jtextfield

我的 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/

相关文章:

java - 有效获取对象的属性或强制声明类属性

java - 有没有办法用比这更少的代码扩展现有的接口(interface)实现?

java - 如何在没有按钮的情况下主动(立即)检查 JFrame 表单中文本框的值?

java - 无法使用边框布局在 JFrame 中编辑 JTextField 的宽度

java - 如何访问 http session 监听器中的应用程序范围?

java - 将 onClickListener 设置为大量 View

java - JScrollPane 内的 JPanel JFrame 内的 JPanel 内

java - 在 Java 中执行之前让单个 if 语句等待?

java - 我的代码似乎在循环,我不知道为什么

java - 使用 DocumentListener 修改多个 JTextField