我正在使用带有html功能的JTextPane
聊天室。用户可以输入html标签以在屏幕上显示图像。但是我有一个问题是将滚动条保持在底部。我已经尝试做了
SwingUtilities.invokeLater(new Runnable() {
public void run() {
vertical.setValue(vertical.getMaximum());
}
});
但滚动条向下滚动然后再向上滚动。在调用函数之后,好像图片完成加载。我也尝试过:
ClientScreen._chatMsgPane.setCaretPosition(_chatMsgPane.getDocument().getLength());
但结果是一样的。所有图像完成加载后是否会触发任何事件?或者还有其他方法可以解决这个问题吗?
答案 0 :(得分:0)
我从来没有在加载图片的JTextPane上试过这个,但Smart Scrolling可能适合你。
答案 1 :(得分:0)
JComponent有一个名为scrollRectToVisible的方法,用于执行此操作:
SwingUtilities.invokeLater(new Runnable() {
public void run() {
int end = chatMsgPane.getDocument().getLength();
try {
chatMsgPane.scrollRectToVisible(chatMsgPane.modelToView(end));
} catch (BadLocationException e) {
throw new RuntimeException(e); // Should never get here.
}
}
});
我不完全确定你是如何将图像添加到JTextPane的,但是如果你自己加载它,可以将它加载到ImageIO.read
的不同线程中,然后在读取时滚动到底部完成;或者,如果要逐步显示图像,可以从ImageIO获取ImageReader,并将自己的监听器传递给其addIIOReadProgressListener
方法。