java - 文本区域缓慢自动向下滚动

标签 java swing

我需要在 txt 文件的文本区域显示一些文本。我将所有行读入数组列表,并将它们附加到文本区域。

现在我需要慢慢向下滚动,如果它显示在某个地方的显示器上,人们可以以这样的速度阅读。

我已经尝试使用我在所有其他问题中找到的 defaultcaret 方法,但我无法让它工作。我也尝试过使用滚动 Pane ,但没有成功。

 private void displayWords() {
    JTextArea textArea = new JTextArea();
    textArea.setPreferredSize(this.getPreferredSize());
    textArea.setFont(font);
    textArea.setLineWrap(true);
    textArea.setWrapStyleWord(true);
    textArea.setAutoscrolls(true);
    DefaultCaret caret = (DefaultCaret) textArea.getCaret();
    caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
    textArea.setBorder(BorderFactory.createEmptyBorder(50, 50, 50, 50));
    for (String s : lines) {
        textArea.append(s + System.getProperty("line.separator"));
    }

    /*
    JScrollPane scrollpane = new JScrollPane(textare);
    scrollpane.setPreferredSize(this.getPreferredSize());
    scrollpane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollpane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER);
    scrollpane.setAutoscrolls(true);
    scrollpane.setViewportView(textare);
    */

    add(textArea);
    repaint();
}

最佳答案

正如评论部分中所写,将 JTExtArea 放在 JScrollPane 中。启动一个计时器并在每个 actionPerformed() 上通过垂直滚动条的 setValue() 向下滚动

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class TAScroll {
    public static void main(String[] args) {
        JFrame f=new JFrame();
        JTextArea ta=new JTextArea();
        for (int i=0;i<50; i++) {
            ta.append(i+"\n");
        }
        final JScrollPane scroll=new JScrollPane(ta);
        f.add(scroll);

        Timer t=new Timer(500, new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                scroll.getVerticalScrollBar().setValue(scroll.getVerticalScrollBar().getValue()+10);
                if (scroll.getVerticalScrollBar().getValue()>=scroll.getVerticalScrollBar().getMaximum()) {
                    ((Timer)e.getSource()).stop();
                }
            }
        });

        t.start();

        f.setLocationRelativeTo(null);
        f.setSize(200,100);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
}

关于java - 文本区域缓慢自动向下滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29846717/

相关文章:

java - Ofbiz : Diffrence between item ATP, 项目 QOH 和产品 ATP 、产品 QOH

java - 未达到 WebApplicationInitializer

java - 使用 WebSocket 进行服务器与服务器通信

java - 处理 TableModelEvent 时是否允许修改 JTable 的模型?

java - 如何让 Java GUI 面板组件 hibernate ?

java - 尝试在空对象引用上调用虚拟方法

java - JUnit 测试单独成功,但一起执行时失败并导致错误?

java - removeAll() 是否也会删除 JPanel 上的布局管理器?

java - JFrame 问题

java - 将组件拖放到背景图像顶部