JavaFX:TextArea光标移回新文本的第一行

时间:2017-05-10 07:56:57

标签: java javafx cursor textarea

我在使用TextArea光标时遇到困难,在向Textarea添加新文字后,它会在第一行中设置为位置0。

问题背景

我有一个Textarea,当我添加足够的文字时,会出现一个滚动条,将新文本放在旧文本下面。直到这里一切正常,然而,TextArea中的光标回到顶部,当我经常插入TextArea时,这会变得很烦人。

以下是我每次添加新行的方式:

void writeLog(String str) {
    textArea.setText(textArea.getText() + str + "\n");
}

如何在每次插入后停止TextArea中的光标返回第一行?

2 个答案:

答案 0 :(得分:1)

如果您要追加到TextArea的末尾,可以使用appendText而不是setText

textArea.appendText(str + "\n");

这将自动滚动到底部并将插入符号放在文本的末尾。

注意:一点背景。

TextInputControl的代码中,appendText会将insertText称为insertText(getLength(), text);,因此textArea.appendText(str + "\n");textArea.insertText(textArea.getLength(), str + "\n");相等。 insertText会将插入符号位置设置为insertationPosition + insertedText.getLength(),这就是插入符号移动到最后的原因。

答案 1 :(得分:-1)

我也遇到了同样的问题,并且找到了解决方案。我在编写一个记事本,在其中必须单击“打开”菜单项来打开文本文件。在另一个函数中,我对其进行编码。

@FXML
private void openaFile(ActionEvent event) throws FileNotFoundException, IOException {
    Stage window=new Stage();
    FileChooser fc=new FileChooser();
    File sf=fc.showOpenDialog(window);
    if(sf!=null){
               FileReader fr=new FileReader(sf);
               Scanner sc=new Scanner(fr);

               while(sc.hasNext()){
                         text.appendText(sc.next());
                         text.appendText("\n");
              }  
    }

}