【问题标题】:Why does the text change after I set the Caret position for JTextArea?为什么设置 JTextArea 的插入符号位置后文本会发生变化?
【发布时间】:2021-08-20 17:07:40
【问题描述】:

我正在创建一个使用 JTextArea 的程序,当我尝试更改插入符号的位置时,它从以下位置开始:

hello
Hello there
-
|

代码:

public void executeCommand(String cmdName){
    Boolean cmdFound = false;
    
    for(int i = 0; i < cmdNames.size(); i++){
        if(cmdNames.get(i).toLowerCase().equals(cmdName.toLowerCase())){
            cmdFound = true;
            cmds.get(cmdName).actionPerformed(new ActionEvent(this, 0, null));
            Config.cmdln.println("-");
            Config.cmdln.setCaretPosition(Config.cmdln.getText().length()); //part that changes
            break;
        }
    }
    
    if(!cmdFound){
        Terminal.cmdln.println("Command " + "\"" + cmdName + "\"" + " not found.");
    }

到这里:

hello
Hello there

|- 

代码:

public void executeCommand(String cmdName){
    Boolean cmdFound = false;
    
    for(int i = 0; i < cmdNames.size(); i++){
        if(cmdNames.get(i).toLowerCase().equals(cmdName.toLowerCase())){
            cmdFound = true;
            cmds.get(cmdName).actionPerformed(new ActionEvent(this, 0, null));
            Config.cmdln.println("-");
            Config.cmdln.setCaretPosition(Config.cmdln.getText().length() - 1); //part that changes
            break;
        }
    }
    
    if(!cmdFound){
        Terminal.cmdln.println("Command " + "\"" + cmdName + "\"" + " not found.");
    }

这是我想要的输出:

hello
Hello there
-|

注意:“|”表示插入符号

如果您需要更多代码,请告诉我。

【问题讨论】:

  • 据我了解,您希望将插入符号放在文本的末尾...如果是这种情况,只需删除设置插入符号位置的行上的- 1
  • 我试过了,但是中间有一个空格
  • 还有其他方法可以改变插入符号的位置吗?
  • 我不确定以下内容,但您可以添加`+1`,因为您正在打印-之前的行。
  • 解决了,非常感谢。把它放在一个答案中,这样我就可以接受它。

标签: java swing jtextarea caret


【解决方案1】:

您可以简单地将Config.cmdln.getText().length() - 1 替换为Config.cmdln.getText().length() + 1- 已更改为+)。

这是可能的,因为您之前添加了一个带有 println() 行的字符。

【讨论】:

    猜你喜欢
    • 2011-08-22
    • 2013-05-21
    • 2013-07-18
    • 2011-06-05
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    相关资源
    最近更新 更多