java - 如何在Java中自动添加行时在TextArea上自动滚动

标签 java swing file-io jtextarea autoscroll

我在Java中有一个对话框窗口,它自动复制一些文件,并且有一个TextArea显示哪个文件被复制,一个ProgressBar女巫显示百分比。进度条工作完美。我对 TextArea 有问题,我希望添加一行时,TextArea 自动向下滚动。 enter image description here

我的代码是:

public void copyDirectory(File sourceLocation, File targetLocation) {

    this.sourceLocation = sourceLocation;
    this.targetLocation = targetLocation;

    if (sourceLocation.isDirectory()) {
        if (!targetLocation.exists()) {
            targetLocation.mkdir();
        }

        String[] children = sourceLocation.list();

        for (int i = 0; i < children.length; i++) {
            try {
                Thread.sleep(100);//                   
            } catch (Exception e) {
                e.printStackTrace();
            }

            jTextArea1.append("100% : Copy...   " + children[i] + "\n");
            jTextArea1.setCaretPosition(jTextArea1.getDocument().getLength());
            jTextArea1.repaint();
            jTextArea1.setAutoscrolls(true);
            jTextArea1.update(jTextArea1.getGraphics());
            jScrollPane1.repaint();
            jScrollPane1.update(jScrollPane1.getGraphics());

            countFile++;
            pos += 1;
            jProgressBar1.setValue(15 + (countFile * 75) / (a));
            jProgressBar1.repaint();
            jProgressBar1.update(jProgressBar1.getGraphics());


            copyDirectory(new File(sourceLocation, children[i]),
                    new File(targetLocation, children[i]));
        }
    } else {
        try {
            InputStream in = new FileInputStream(sourceLocation);
            OutputStream out = new FileOutputStream(targetLocation);


            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
        } catch (IOException e) {
        }
    }


}

我已经添加了 jTextArea1 的代码:

jTextArea1 = new javax.swing.JTextArea();
DefaultCaret caret = (DefaultCaret)jTextArea1.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);

jTextArea1 仅在复制结束时更新

最佳答案

在文本区域中使用滚动 Pane :

JScrollPane txt_more_info_pane = new JScrollPane(jTextArea);  
                txt_more_info_pane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        txt_more_info_pane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);

关于java - 如何在Java中自动添加行时在TextArea上自动滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22398710/

相关文章:

java - IOUtils.copy() 中的字符集参数有什么作用?

java - 如何使用 FileReader 逐行读取

java - 使用 filereader 和 filewriter 读取和写入文件

c++ - 从 C++ 中的偏移量覆盖二进制文件的字节

java - 几个 jar 中的 freemarker 模板

java - 为什么在 Java 中包含 servlet 和 "worker"线程的 Web 应用程序中使用 ServletContext 对象

java - 复制到全局剪贴板不适用于 Ubuntu 中的 Java

java - 如何存储 Java 桌面应用程序(多平台)全局设置?

java - 使用 Files.delete() 删除文件时的奇怪行为

java - 将 json 数组发送到 Rest 端点会导致 Jackson 解析异常