如何在JTextPane完成加载图像后将滚动条设置为底部?

时间:2013-06-09 20:36:15

标签: java swing jscrollpane jtextpane jscrollbar

我正在使用带有html功能的JTextPane聊天室。用户可以输入html标签以在屏幕上显示图像。但是我有一个问题是将滚动条保持在底部。我已经尝试做了

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        vertical.setValue(vertical.getMaximum());
    }
});

但滚动条向下滚动然后再向上滚动。在调用函数之后,好像图片完成加载。我也尝试过:

ClientScreen._chatMsgPane.setCaretPosition(_chatMsgPane.getDocument().getLength());

但结果是一样的。所有图像完成加载后是否会触发任何事件?或者还有其他方法可以解决这个问题吗?

2 个答案:

答案 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方法。