2016-12-11 12 views
0

これに似た質問がたくさんあることは知っていますが、残念ながらTextArea内でscrollBarの自動スクロールについてです。JScrollPane:JPanelの自動スクロール

私はJListをシミュレートするJScrollPaneを使用します。私はGridLayoutJScrollPaneに小さなJPanelsを追加し、彼らはvericallyスタック。

スクロールバーを最後に追加した要素(下)に従いたいと思っていますが、動作させることができません。

私のような、Textのための答えの一部を適応させることを試みた:updatePolicyを変更するに

.autoScrolls(true); 

または

JScrollBar vertical = scollPan.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 

と一つでも、何もがJScrollPaneにそのISNのために働くんテキストエリアにバインドされていないので、私はバーを手動でスクロールすることしかできません。

vertical.setValue(vertical.getMaximum()); 

が何かをやった、それはバーを下にスクロールしますが、ちょうど約2/3道の、私はそれを呼び出した後にスクロールペインに.revalidate()を追加しただけの理由。

+0

1)すぐに役立つようにするには、[MCVE]または[ショート、自己完結型、正しい例](http://www.sscce.org/)を投稿してください。 2)なぜ適切なレンダリングコンポーネントを持つ 'JList'を使用しないのですか? –

+0

リスト内の項目が複雑なAPIに由来し、JListがそれらを適切にサポートしていないため、JListを使用できません。独自のレイアウト、カスタムグラフィックス、機能、オーバーレイ、マウスとドラッグ検出、複数の内部ペイン、設定他のイベントなどに応じて変化します。これは私がMCVEを構築するのに問題がある理由の一部です。 –

+0

「これは私がMCVEを構築するのに問題がある理由の一部です」 - あなたが話していることはすべて、知識の不足のために完全に無関係です。 'MCVE'。関連するのは、パネルにコンポーネントを追加することだけです。パネルの機能はスクロールとは関係ありません。 – camickr

答えて

1

パネルにコンポーネントを追加した後、レイアウトマネージャが起動されていることを確認するには、revalidate()repaint()を実行する必要があります。

JScrollBar vertical = scollPan.getVerticalScrollBar(); 
vertical.setValue(vertical.getMaximum()); 

そして、それはすべてのレイアウトコードの後に​​実行されるように、コードがEvent Dispatch Thread (EDT)の最後に追加されていることを確認するためにSwingUtilities.invokeLater()に上記のコードをラップします。

+0

ありがとう、invokeLater()はそのトリックを行いました。私は、layoutmanagerが終了する前に、新しいバーの位置を適切に設定していました。 –