2011-12-21 10 views
1

私はjtextareaを使用しています。アプリケーション(ログなど)の実行中に動的に塗りつぶされます。垂直スクロールバーの自動スクロールを削除したい、テキストがフィールドに追加され、キャレットの位置が変更されない私が手動でそれをドラッグした場合のみ)。これどうやってするの?私はscrollPane.getHorizontalScrollBar().setAutoscrolls(false) を試しましたが、これは役に立ちませんでした。jtextareaスクロール

答えて

2

を、テキスト領域がスクロールしません。それを実現させるためにコード内に何かを持たなければなりません。

通常のアプローチは、文書の末尾にキャレットを設定することです(あなたはJava 5の上にいるときにプラスcaret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);; Text Area Scrolling参照)スクロールを停止するには

を、アプリ内のコードを見つけなければならないし、消して。あなたが選択したテキストをドラッグして、マウスがコンポーネントの外で取得プラス、このプロパティの目的は何か他のもの(true場合で、合成マウスイベントは限り生成されますときにのみ使用しているため

setAutoscrolls()は、この場合には効果がありませんマウスがコンポーネントの外側にあります)。

+0

DefaultCaret.NEVER_UPDATEモードでcaret.getDot()は0を返します。myTextArea.getDocument()。getLength()と比較して必要なアクションを実行する現在のキャレット位置を見つける方法はありますか? – Martin

+0

'myTextArea.getCaretPosition()'を呼び出すことによって。自動的にスクロールしたいのですか、**スクロールしないように**したいですか?あなたの質問は本当に明確ではありません... –

0

私が正しくあなたの質問を理解していれば、あなたがこのようなものを使用でき、:それ自体で

myTextArea.setCaretPosition(myTextArea.getDocument().getLength() - 1); 
+2

正しいアイデアですが、getText()は使用しないでください。ドキュメント内のすべてのテキストから新しい文字列を作成する必要があります。代わりに 'getDocument()。getLength()'を使用してください。 – camickr

+0

@camickr:ありがとう!私はこれが以前どのように内部的に働いているのか分かりませんでした。 – mort