为什么在我为 JTextArea 设置 Caret 位置后文本会发生变化?

Why does the text change after I set the Caret position for JTextArea?

我正在创建一个使用 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
-|

注:“|”代表插入符号[=​​15=]

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

您只需将 Config.cmdln.getText().length() - 1 替换为 Config.cmdln.getText().length() + 1- 已更改为 +)。

这是可能的,因为您在前面的 println() 行中添加了一个字符。