-1

jtextarea を使用してスクロールバーのないエディターを開発しようとしています。そのため、テキストが長すぎて jtextarea に収まらない場合は、垂直スクロールバーを表示せずに jtextarea 内で編集できる小さな部分文字列に分割する必要があります。水平スクロールバーを簡単に取り除くことができるからです。 setLineWrap と setWrapStyleWord を使用して 1 つ。垂直スクロールバーの adjusmentListener を使用してその変更をリッスンしようとしましたが、ビジネス ロジックの最後で jtextarea append メソッドと setText メソッドがアクティブになったため機能しませんでした。また、repaint、revalidate、および update メソッドを呼び出そうとしましたが、希望はありませんでした。この問題を解決するのを手伝ってください。事前に感謝します。

4

3 に答える 3

1

jtextarea を使用してスクロールバーのないエディターを開発しようとしています。そのため、テキストが長すぎて jtextarea に収まらない場合は、垂直スクロールバーを表示せずに jtextarea 内で編集できる小さな部分文字列に分割する必要があります。水平スクロールバーを簡単に取り除くことができるからです。 setLineWrap と setWrapStyleWord を使用して 1 つ。

これを完全に理解しているかどうかはわかりません。おそらく、さらに説明できますか?JScrollPane 内に JTextarea を配置しないのはなぜですか? 含まれるテキストが JTextArea が表示できるテキストよりも大きい場合、どのような動作が望まれますか?

垂直スクロールバーの adjusmentListener を使用してその変更をリッスンしようとしましたが、ビジネス ロジックの最後で jtextarea append メソッドと setText メソッドがアクティブになったため機能しませんでした。また、repaint、revalidate、および update メソッドを呼び出そうとしましたが、希望はありませんでした。

入力されたテキストがテキスト コンポーネントにコミットされる前にトラップする場合は、DocumentFilter を JTextArea の関連付けられたドキュメント (PlainDocument) に設定することを検討してください。

于 2012-01-15T01:50:27.210 に答える
1

Hovercraft Full Of Eels で既に示唆されているようにDocumentDocumentFilterおよび/またはDocumentListenerインターフェースを確認する必要があります。

それらを調整することで、誰かがテキストを追加したいときに表示されるテキストを完全に制御できます。たとえば、新しいテキストを追加する前後にテキストの最初の部分を削除して、ドキュメントの行数/文字数を制限できます。

textcomponents に関する Swing チュートリアル「DocumentFilter の実装」セクションにそのような例が含まれています。このDocumentSizeFilterクラスは、探しているものです (JDK の一部ではなく、Swing チュートリアル コードの一部です)。そのサンプル コードのコメントとして既に提案されているように、コンテンツが長くなりすぎる新しいテキストを追加するときに、ドキュメントの最初の部分を削除するオプションがありますが、それは宿題としてタグ付けされているため、あなたに任せます。

于 2012-01-15T12:59:40.790 に答える
0

HovercraftとRobinの両方に感謝します。あなたの答えは私を正しい方法に導きます。このメソッドが返すパラメーターとしてJTextArea Document Lengthを渡すJTextArea.modelToView()を使用して、「Core Swing:高度なプログラミング」ブックで正確な答えを見つけましたコーディネーションが最終的な文字のコーディネーションを表す Rectangle オブジェクト。これらのコーディネーションを JTextArea の下隅と比較して、この最終的な文字がこの下に到達しているかどうかを確認します。

于 2012-01-16T03:17:51.700 に答える