2016-09-09 5 views
1

JPanelを持つJScrollPaneがあります。私はJPanel上に多くの異なるコンポーネントも持っています(例えば、Label、JTextFields、JTextAreas)。これらのコンポーネントは、プログラムで(実行時に、ユーザーの要求に応じて)追加されます。 JPanelはSpringLayoutを使用します。スクロールは計算せずに正しく機能しないため、コンポーネントはコンポーネントを追加した後にJPanelの推奨サイズを計算します。私のprepareGui()メソッドの一環として、コンポーネントを追加したり、適切なサイズを計算したりしています。 コンポーネントに表示されるデータは定期的にリフレッシュされます(リスナーによって呼び出されるrefreshData()メソッドで)。データの更新後にスクロールバーが移動する

私の問題点:スクロールバーは常に固定位置に設定されています(理由は分かりません)。私はスクロールバーを元気にして元気にしておきたい。

スクロールバーが動く場所を見つけようとしました。私は開始時とrefreshdataを()メソッドの最後にいくつかの値をチェックし、彼らは同じであった(彼らはrefreshdataを内部で変化しなかった()):

scrollPane.getVisibleRect().getX() 
scrollPane.getVisibleRect().getY() 
scrollPane.getVisibleRect().getWidth() 
scrollPane.getVisibleRect().getHeight() 
panel.getVisibleRect().getX() 
panel.getVisibleRect().getY() 
panel.getVisibleRect().getWidth() 
panel.getVisibleRect().getHeight() 
scrollPane.getHorizontalScrollBar().getX() 
scrollPane.getHorizontalScrollBar().getY() 
scrollPane.getHorizontalScrollBar().getWidth() 
scrollPane.getHorizontalScrollBar().getHeight() 
scrollPane.getHorizontalScrollBar().getValue() 
scrollPane.getVerticalScrollBar().getX() 
scrollPane.getVerticalScrollBar().getY() 
scrollPane.getVerticalScrollBar().getWidth() 
scrollPane.getVerticalScrollBar().getHeight() 
scrollPane.getVerticalScrollBar().getValue() 

レイアウトマネージャの変更はかかりませんでした効果。

私は1つのことに気付きました(意味がないかどうかわかりません)。優先サイズ(prepareGui()内)のみを設定すると、スクロールバーが最後まで移動します。私もサイズを設定すると、スクロールバーは変わった固定位置に移動します。

どうすればこの問題を防ぐことができますか? スクロールバーは現在の位置を維持する必要があります。

答えて

1

JPanelの代わりにJTextAreaに関するトピックでhttps://stackoverflow.com/a/5230477/5694159(Johan Mのおかげで)の回答が見つかりました。 refreshData()が別のスレッドで呼び出されているときにうまくいきます。

この質問と回答が役に立ちそうですか?

関連する問題