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

Posted

技术标签:

【中文标题】JavaFX:TextArea 光标移回新文本的第一行【英文标题】:JavaFX: TextArea cursor moves back to the first line on new text 【发布时间】:2017-10-08 18:08:54 【问题描述】:

TextArea 的光标很难使用,在向Textarea 添加新文本后,它一直被设置为第一行的位置 0。

问题背景

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

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

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

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

【问题讨论】:

试试这个解决方案:***.com/questions/29895597/… 【参考方案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(),这就是插入符号移动到末尾的原因。

【讨论】:

这对我不起作用。这与我调用 setText 没有什么不同。 (JavaFX 15)【参考方案2】:

我也遇到了同样的问题,我得到了解决方案。我正在编写一个记事本,我必须在单击“打开”菜单项时打开文本文件。在另一个函数中,我编写代码。

@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");
                
    

【讨论】:

这不是约会网站;) 或者换句话说 - 没有联系的地方,所以删除了链接。作为答案:与公认的答案相比,没有什么,有吗?问题中没有任何与读取文件相关的内容(无论如何,这很可能应该在后台线程中完成)。

以上是关于JavaFX:TextArea 光标移回新文本的第一行的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX:更改文本区域中的光标

JavaFX - TextArea 的掩码文本

如何禁用 TextArea (JavaFX) 中的文本选择?

javafx 8在textarea中编辑文本

从 TextArea 拖动选定文本时出现 Javafx 问题

加载大量文本时在 JavaFX 2 中加速 TextArea 的方法?