我想把大文件(如10-15k行)读入jtextarea。除此之外,我还必须添加到列表中的每一行,并突出jtextarea中的一些特定行。
我现在尝试的是,将文件传递到FileReader中到BufferedReader中。在我的SwingWorker中,在doBackground方法中我调用:
while ((line = br.readLine()) != null) {
textArea.append(line);
textArea.append(System.getProperty("line.separator"));
list.add(line);
highlightLine(lineNumber);
}当我运行这个程序时,我选择文件并打开读取进程,它会立即加载多达700行,然后程序就会慢下来,每秒加载10行。
我的另一个想法是,使用JTextComponent read方法读取整个文件( setText似乎比追加每一行更快),然后再读取整个文件或遍历jtextarea中的每一行,并将该行添加到列表中并突出显示,我认为这不是很有效。你有什么建议吗?
发布于 2015-08-01 14:49:37
我想将大文件(如10-15k行)读入jtextarea区域。
使用read(...)类的JTextArea方法直接将整个文件读入文本区域。
我还必须将每一行添加到列表中
为什么你需要两份课文?如果需要一行数据,可以从文本区域获取文本:
int start = textArea.getLineStartOffset(...);
int end = textArea.getLineEndOffset(...);
String text = textArea.getDocument().getText(...);突出显示某些特定行
在将行加载到文本区域后,使用荧光笔突出显示它们。
Highlighter highlighter = textArea.getHighlighter();
highlighter.addHighlight(...);同样,您可以使用上面的代码获取行的偏移量。
发布于 2015-08-01 12:54:10
使用文档接口。它是保存视图组件数据的模型,即JTextArea。您可以使用JTextArea和getDocument获取它,也可以使用已经实现Document的类之一: AbstractDocument、DefaultStyledDocument、HTMLDocument、PlainDocument。然后将您选择的Document与setDocument一起添加到JTextArea中。
可以使用insertString(int offset, String str, AttributeSet a)向Document添加内容。它还支持几个侦听器,您可以考虑使用render(Runnable r)对文档进行样式设置。
发布于 2015-08-01 12:46:42
我还没有尝试过这种方法,但是我建议将所有文件内容放入一个字符串中,然后使用setText(String )方法一次性设置JTextArea的文本。
https://stackoverflow.com/questions/31761867
复制相似问题