Textarea慢慢地自动缩减

时间:2015-04-24 11:47:19

标签: java swing

我需要在txt文件的文本区域显示一些文本。我把所有的行都读成了一个arraylist,然后将它们附加到textarea上。

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

我尝试使用我在其他所有问题中找到的defaultcaret方法,但我无法让它工作。我也试过使用滚动窗格,但没有运气。

 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();
}

1 个答案:

答案 0 :(得分:2)

正如在评论部分中所写,将JTExtArea放在JScrollPane中。启动一个Timer并在每个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);
    }
}