在与构造GUI分开的单独线程中创建DefaultStyleddocument似乎是创建巨大文本区域的最快方法。DefaultStyleddocument是线程安全的。
这是我用来测试DefaultStyleddocument的代码。我用空格创建了文本,以便换行的Swing代码有机会工作。
package com.ggl.testing;import java.util.Random;import javax.swing.Jframe;import javax.swing.JScrollPane;import javax.swing.Jtextarea;import javax.swing.SwingUtilities;import javax.swing.text.BadLocationException;import javax.swing.text.DefaultStyleddocument;public class Hugetextarea implements Runnable { private DefaultStyleddocument document; private Jframe frame; private Jtextarea textarea; public Hugetextarea() { this.document = new DefaultStyleddocument(); Runnable runnable = new Runnable() { @Override public void run() { buildLongString(400000); } }; new Thread(runnable).start(); } @Override public void run() { frame = new Jframe(); frame.setTitle("Huge Text"); frame.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE); textarea = new Jtextarea(document); textarea.setLineWrap(true); frame.add(new JScrollPane(textarea)); frame.setSize(400, 350); frame.setLocationRelativeTo(null); frame.setVisible(true); } private void buildLongString(int length) { Random random = new Random(); String[] chars = { "s", "t", "a", "y", " " }; for (int i = 0; i < length; i++) { try { document.insertString(document.getLength(), chars[random.nextInt(chars.length)], null); } catch (BadLocationException e) { e.printStackTrace(); } } } public static void main(String[] args) { SwingUtilities.invokeLater(new Hugetextarea()); }}


