2

次のコードスニペットがあります

query_area = new JTextArea("");
query_scroll_pane = new JScrollPane(query_area);
query_scroll_pane.setSize(1000,80);
query_scroll_pane.setLocation(10,10);
query_panel.add(query_scroll_pane);

これにより、テキストエリアがスクロールペインに追加されます。メソッドで、textareaのテキストを次のように動的に設定します

sf.query_area.setText("Query "+(sf.query_counter)+sf.query_store[sf.query_counter]);
System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());

これで私のクエリは、長いテキストが表示されたときにスクロールバーが表示されますが、system.out.printlnはスクロールバーの位置を0として出力し、値を増やしたものではありません。

なぜそうなのか ??

4

2 に答える 2

4

考えられる唯一の理由は、ビューポートの位置が変わっていないからです。

最初に頭に浮かぶのは、テキストの開始セットからの位置の変更にビューポートがまだ反応していない可能性があるため、テキストを設定した直後に結果をダンプすると、スクロールバーの現在の状態が反映されることです (まだ更新を開始していません)

あなたは試すことができます

SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        System.out.println("Position: "+sf.query_scroll_pane.getHorizontalScrollBar().getValue());        
    }
});

代わりに、より最新の値が出力されるかどうかを確認します

AdjustmentListenerまたは、変更が発生したときに通知するスクロールバーに を追加することもできますJScrollBar#addAdjustmentListener

于 2012-11-03T20:13:34.717 に答える
1

これで私のクエリは、長いテキストが表示されたときにスクロールバーが表示されますが、system.out.printlnはスクロールバーの位置を0として出力し、値を増やしたものではありません。

使用する

query_area = new JTextArea();
DefaultCaret caret = (DefaultCaret) query_area.getCaret();
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
于 2012-11-03T20:36:30.953 に答える