优化JTextArea文本绘图

时间:2015-12-12 00:25:46

标签: java jtextarea

因此,我尝试制作一个小程序,以自定义方式显示来自某个应用的聊天记录。我alredy构建了我的GUI,我可以从.txt文件中读取消息。我的问题是,当我在控制台上打印它们时,程序大约需要1.5秒来处理17k行文件。但是,当我尝试在GUI上显示文本时,大约需要一分半钟,我不知道为什么。

要从文件中读取文本,我使用的是BufferedReader。要在JTextArea上显示文本,我所做的就是以下内容:

JTextArea.append(myString+"\n");

我的测试文件大约有1,000,000个字符,如果有任何帮助的话。我真的很想知道发生了什么,也许还有一些关于如何修复它的建议。提前谢谢。

1 个答案:

答案 0 :(得分:1)

使用StringBuilder构建String,然后只需在TextArea中调用setText(),这样就不会强制重新绘制每行的区域。

    // copy any remaining elements
    while (arr1.size() > 0)
        sorted.add(arr1.get(0));

    while (arr2.size() > 0)
        sorted.add(arr2.get(0));

打印:

public static void main(String[] args) {
    java.awt.EventQueue.invokeLater(() -> {
        JFrame frame =new JFrame();
        JTextArea area = new JTextArea();
        JScrollPane pane = new JScrollPane(area);

        frame.add(pane);
        frame.setPreferredSize(new Dimension(400,400));
        frame.pack();
        frame.setVisible(true);
        long t1 = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++) {
            area.append(i+"\n");
        }
        long t2 = System.currentTimeMillis();
        System.out.println("(t2-t1) = " + (t2-t1));
        StringBuilder sb = new StringBuilder(); 
        long t3 = System.currentTimeMillis();
        for(int i = 0; i < 100000; i++) {
            sb.append(i+"\n");
        }
        long t4 = System.currentTimeMillis();
        area.setText(sb.toString());
        System.out.println("(t4-t3) = " + (t4-t3));

    });
}

使用JTextArea.append()测量第一个时间差,第二个时间是StringBuilder.append(),后跟JTextArea.setText()。