我有这个JTextPane(包裹在一个JScrollPane)由一个支持HTMLEditorKit.该内容JTextPane是简单的HTML,其中一些图像(本地文件)使用img标签嵌入.问题是当你加载JTextPane它时,需要一瞬间加载,然后它会在页面底部出现滚动条.如果我做:
JTextPane text = new JTextPane();
JScrollPane scroll = new JScrollPane(text);
// do some set up...
scroll.getVerticalScrollBar().setValue(0);
Run Code Online (Sandbox Code Playgroud)
它暂时设置滚动条,然后另一个thead(可能是负责加载图像)来并将滚动条敲回底部.我尝试添加:
((AbstractDocument)text.getDocument()).setAsynchronousLoadPriority(-1);
Run Code Online (Sandbox Code Playgroud)
但这并没有解决它.有没有办法从任一得到一个事件text.getDocument()或text当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种方法是我设置另一个线程等待一秒左右,然后设置滚动条,但这是一个糟糕的黑客.
你的建议?
我在 JScrollPane 中有一个 JPanel。JPanel 垂直包含多个 JTextAreas。
我喜欢在页面刷新时将滚动窗格的滚动保持在顶部。目前,滚动总是从底部开始。
这是我当前的代码,它不起作用..
panel.invalidate();
panel.revalidate();
panel.repaint();
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
((JPanel) panel).setLocation(new Point(0, 0));
}
});
Run Code Online (Sandbox Code Playgroud)
我也尝试将下面的代码添加到滚动窗格中,但它不起作用..
scrollPanel.getViewport().setViewPosition( new Point(0, 0) );
Run Code Online (Sandbox Code Playgroud)
我研究了其他 stackoverflow 问题,他们在 Jscrollpane 中使用了 Jtextarea(他们使用 setCaretPosition(0) 解决了这个问题,但是我不能对面板使用相同的功能)。就我而言,还有一个额外的层。
我该如何解决这个..?
编辑**
根据 Pavlo Viazovskyy 的建议,我也在下面尝试过这个,但它仍然对我不起作用.. :(
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scrollPane.getVerticalScrollBar().setValue(0);
}
});
Run Code Online (Sandbox Code Playgroud) 我有一些文本区域充满了信息循环。循环完成后是否可以使其“跳转”或自动滚动回到顶部,以便用户从头开始而不是从头看到?