我需要在 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/