问题描述
我有一个包裹在 JTextArea 周围的 JScrollPane。当我填充 JTextArea 时,它会自动滚动到底部。我希望它位于顶部。
这是创建它们的代码:
caption=new JTextArea();
caption.setLineWrap(true);
caption.setWrapStyleWord(true);
scrollCaption=new JScrollPane(caption);
scrollCaption.setPreferredSize(new Dimension(180,20));
scrollCaption.setMinimumSize(new Dimension(100,20));
这是填充它的代码:
int fontsize=scrollCaption.getHeight()/4;
if (fontsize<10) fontsize=10;
caption.setFont(caption.getFont().deriveFont((float)fontsize));
String path=textfile.getAbsolutePath();
List<String> lines=Files.readAllLines(Paths.get(path));
StringBuilder sb=new StringBuilder();
for (String line : lines)
{
sb.append(line).append('\n');
}
caption.setText(sb.toString());
int scrollmax=scrollCaption.getVerticalScrollBar().getMaximum();
// scrollCaption.getVerticalScrollBar().setValue(0);
scrollCaption.getViewport().setViewPosition(new Point(0,0));
我试着说 getVerticalScrollBar().setValue(0) 但它仍然滚动到底部。然后我尝试了 getViewPort.setViewPosition(new Point(0,0)) 并且它仍然滚动到底部。也许我做这些太快了?在我这样做之后会发生某种“自动滚动到底部”吗?但我不知道我还能在什么时候抓住它。
另一个线索:如果我滚动到顶部,然后调整窗口大小,它会一直滚动到顶部。
我使用的是 Java 8。
解决方法
好的,我找到了解决方案。
caption.setCaretPosition(0);
像许多编程问题一样,当您知道如何去做时,这很简单。
我仍然不明白为什么 viewport.setLocation 不起作用。在同一个程序的其他地方,我使用完全相同的函数来滚动相同的文本框。但无论如何。