1

スクロール ペインに含まれるテーブルでいくつかの作業を行っています。私が呼び出している関数は、テーブルに対して操作を実行してからテーブルを再描画します。これにより、垂直スクロール バーの位置が変更されます。関数の後にスクロールバーの初期位置を復元する方法を見つけようとしています。ここに私がこれまでに持っているもののサンプルがあります:

    public void lineCopy(){
    scrollPosition = jScrollPane1.getVerticalScrollBar().getValue;

    //Main body of tableCopy function here, including call to
    //getNewTable() which gets the new table

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            jScrollPane1.getVerticalScrollBar().setValue(scrollPosition);
            System.out.println("Run Later Here");
        }
    });
    System.out.println("End of copy function");        

    }

問題は、スクロール バーが関数の前の値にリセットされないことです。通常、以前よりもウィンドウを下にスクロールします (たとえば、関数の前に 200 行目がウィンドウの上部にあった場合、250 行目はウィンドウの一番上にあります)。上から後)。

私が知っていることは次のとおりです。実際、invokeLater は、追加したシステム出力行に基づいて後で呼び出しています。また、setValue(scrollPosition) ではなく setValue(0) に設定すると、毎回機能するため、setValue 関数が機能していることもわかっています。

その他の情報: ビューポートの取得/設定を使用して同様のコードを試したところ、同様の結果が得られました。また、行の値のタイプ (行列と定数) に基づいて、高さが異なる行もあります。

助けてくれてありがとう

4

1 に答える 1

0

スクロールして一番上に戻るには、これは何もしません:

JscrollPane.getVerticalScrollBar.setValue()

以下を使用する必要があります。

TextComponent.setCaretPosition()

それ以外の:

JTable.scrollRectToVisible()
于 2014-04-17T06:21:07.567 に答える