我需要在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();
}
答案 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);
}
}