two*_*e18 6 html java events swing
我有这个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
当窗格完成加载,这样我可以设置滚动条,然后会通知我吗?另一种方法是我设置另一个线程等待一秒左右,然后设置滚动条,但这是一个糟糕的黑客.
你的建议?
Spy*_*der 20
你尝试过使用invokeLater吗?
final JScrollPane scroll = new JScrollPane(text);
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
scroll.getVerticalScrollBar().setValue(0);
}
});
Run Code Online (Sandbox Code Playgroud)
如果这不起作用,挖掘图像视图是非常困难的,所以我的下一步是追踪滚动条改变的原因:
scroll.setVerticalScrollbar(new JScrollBar() {
public void setValue(int value) {
new Exception().printStackTrace();
super.setValue(value);
}
});
Run Code Online (Sandbox Code Playgroud)
您还可以在setValue()方法中使用调试器,而不是仅打印堆栈跟踪.