如何阻止 JScrollPane 在初始显示时自动滚动到底部?
How to stop JScrollPane from auto scrolling to bottom on initial display?
我有一个围绕 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)) 并且它仍然滚动到底部。也许我做这些太早了?在我这样做之后会发生某种“自动滚动到底部”吗?但是不知道什么时候才能抓到。
另一个线索:如果我滚动到顶部,然后调整 window 的大小,它会保持滚动到顶部。
我 运行 在 Java 8.
好的,我找到了解决办法。
caption.setCaretPosition(0);
像许多编程问题一样,当您知道如何去做时,事情就很简单了。
我还是不明白为什么 viewport.setLocation 不起作用。在同一程序的其他地方,我使用完全相同的函数来滚动相同的文本框。但无论如何。
我有一个围绕 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)) 并且它仍然滚动到底部。也许我做这些太早了?在我这样做之后会发生某种“自动滚动到底部”吗?但是不知道什么时候才能抓到。
另一个线索:如果我滚动到顶部,然后调整 window 的大小,它会保持滚动到顶部。
我 运行 在 Java 8.
好的,我找到了解决办法。
caption.setCaretPosition(0);
像许多编程问题一样,当您知道如何去做时,事情就很简单了。
我还是不明白为什么 viewport.setLocation 不起作用。在同一程序的其他地方,我使用完全相同的函数来滚动相同的文本框。但无论如何。