0

JTextPanewith html機能でチャットルームを作っています。ユーザーは html タグを入力して画面に画像を表示できます。しかし、スクロールバーを一番下に保つのに問題があります。私はすでにやろうとしています

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

ただし、スクロールバーは下にスクロールしてから、もう一度上にスクロールします。関数が呼び出された後、画像の読み込みが終了したようです。私も試しました:

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

しかし、結果は同じです。すべての画像の読み込みが終了した後にトリガーされるイベントはありますか? または、これを修正する他の方法はありますか?

4

2 に答える 2

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メソッドに渡すことができます。

于 2013-06-10T18:06:01.717 に答える
0

画像をロードしている JTextPane でこれを試したことはありませんが、Smart Scrollingがうまくいくかもしれません。

于 2013-06-10T02:15:47.620 に答える