Java在JTEXTFIELD中移动光标



我已经看到了有关使用x和y坐标的机器人类移动光标的问题,但是我试图弄清楚如何在jtextfield中的文本中重新定位光标。p>我有一个开放的括号按钮,当单击时,它将在jtextfield中使用任何文本,concat"("向它设置并将其设置为jtextfield。

我想知道如何也可以添加闭合括号,但是将光标放入2之间,以便用户可以不间断地键入。有任何建议吗?

如果要将jexxtfield中的套件从按钮中移动到特定位置,那么这样做的一种方法是首先使用 jtextfield.requestfield.requestfield.request.request.request.request.()方法,您需要使用 jtextfield.setCaretPosition()方法来实际重新安置Caret。

如果您有一个名为 jtextfield1 的JTEXTFIELD,并且您想将其移至内部包含的文本末尾,则可以使用:

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

您需要注意不要超过jtextfield中的文本长度,否则将发生 illegalargumentException 将发生您可以通过周围的方式 catch 尝试/捕获块中的上述代码。您还需要考虑在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...
}

我有一个开放的括号按钮,当单击时,它将在jtextfield中使用任何文本,concat"("向它设置并将其设置为jtextfield。

不要使用getText()/setText()执行此操作。

相反,您只想将新文本"附加"到文本字段。

因此,您的actonListener中的逻辑可能是:

int end = textField.getDocument.getLength();
textField.setCaretPosition(end);
textfield.replaceSelection("()");
textField.setCaretPosition(end + 1);

附加文本更有效,因为您仅生成添加文本的DocumentEvent

如果您使用getText()/setText()方法,则为删除文本生成DocumentEvent,然后为添加的文本进行第二个事件,这不会反映实际发生的事情。

另外,使用文档的长度而不是获得文本也更有效,因为您不需要实际创建字符串对象。

最新更新