Java 在 JTextField 中移动光标

标签 java swing cursor jtextfield

我看到过有关使用 Robot 类通过 x 和 y 坐标移动光标的问题,但我正在尝试找出如何在 JTextField 中的文本之间重新定位光标。

我有一个左括号按钮,单击该按钮将获取 JTextField 中可能存在的任何文本,将“(”连接到它并将其设置为 JTextField。

我想知道如何添加右括号,但将光标放在两者之间,以便用户可以不间断地继续输入。有什么建议吗?

最佳答案

如果您想将 JTextField 中的插入符从按钮移动到特定位置,那么一种方法是首先使用 JTextField.requestFocus() 方法将焦点设置在其上,然后您需要使用 JTextField.setCaretPosition() 方法来实际重新定位插入符。

如果您有一个名为 jTextField1 的 JTextField 并且您想要将插入符移动到其中包含的文本末尾,那么您可以使用:

jTextField1.requestFocus(); //
jTextField1.setCaretPosition(jTextField1.getText().length());

您需要小心,不要超过 JTextField 中文本的长度,否则将会出现 IllegalArgumentException,您可以通过将其括起来捕获上面的代码位于 try/catch block 中。您还需要考虑 JTextField 中可能没有任何文本的情况。

try {
    jTextField1.requestFocus();
    jTextField1.setCaretPosition(jTextField1.getText().length());
}
catch (IllegalArgumentException ex) {
    ///Do Something Here...
}

要将括号附加到 JTextField 的末尾,然后将插入符放在它们之间,如下所示:

String txt = jTextField1.getText(); // Get the text contained in Textfield (if any)
if (txt.equals("")) { txt+= "()"; } // Nothing for text so just add Parenthases 
else { txt+= " ()"; } // Some text there so add a space and Parenthases
jTextField1.setText(txt);
try {
    // Set focus to JTextField
    jTextField1.requestFocus();
    // Move the caret between the Parenthases
    jTextField1.setCaretPosition(jTextField1.getText().length()-1);
}
catch (IllegalArgumentException ex) {
    // Do something here...
}

关于Java 在 JTextField 中移动光标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42619193/

相关文章:

java - 如何制作在调整 JFrame 大小时会调整大小的图像?

java - 想要在 JTree 列出的元素上移动鼠标时更改光标

c++ - Qt - QTextStream - 如何将光标位置设置为一行的开头?

java - 重命名主 Activity 后出错

java - 如何将文本附加到 JTextArea (Java) 的特定位置?

java - 鼠标点击监听器不触发

java - 如何检查光标类型

java - 模拟继承的 protected 方法

java - 将输入发送到标准输入并在 Java 中获得完整输出 - Festival TTS

java - 使用 SimpleDateFormat 解析 svn log -xml 日期输出