2011-02-28 19 views
1

JTextArea内の単語セットのすべての一致を、いくつかのコンテキスト(N行、おそらくユーザー設定可能)と一緒に表示するコンポーネントがあります。複数のビューポートが同じJTextAreaにありますか?

私はすでに私はそのオフセットを知っているので、その境界を決定することができます。テキストの行の高さを知っているので、ペイントしたいコンテキスト領域の境界を判断できます。

JViewportのようないくつかのクラスは、基本コンポーネントの複数のビューをペイントできるだけですか? JViewportは通常のSwingコンポーネントなので、同じテキスト領域を別のビューポートに置くとすぐに、最初の領域から切り離されます。

編集:それは結局のところ実は、私はJTextAreaのが私を与えるライン・ツー・オフセットマッピングがラップラインをカウントしないようコンテキスト領域の境界を決定するために見えることはできません。

答えて

2

ここで問題となるのは、JViewportは通常のコンテナであり、そのビューコンポーネントを子コンポーネントとして扱います(各コンポーネントは1つのコンテナ内の子にしかなりません)。常に1つのコンポーネントだけがフォーカスなどを持つことができれば、これはかなり合理的です。

JViewportのようなクラスで、親を持たないコンポーネントのビューをペイントすることはできませんが、あなたの場合は、2つのJTextAreasは同じドキュメントを共有します。あなたはキャレットムーブメントを同期させなければならないでしょう(もし望めば)。

+0

私は、ビュー矩形とテキスト矩形とのマッピングを保持するこのようなビューポートを作成しようとしました。これは正しくレンダリングされますが、もちろんイベントは機能しません。したがって、JTextAreaはコンポーネント階層に存在しなければならないようですが、どういうわけか、別の部分を別々に翻訳する必要があります。 – Trejkaz

0

あなたが説明するとおりに存在するものはありません。実際、JTextAreaの表示をカスタマイズしたいと思うようです。その場合、JTextAreaがペイントする方法をオーバーライドして変更することができます。一番上にペイントするか、それを完全に変更する。

+0

JTextAreaはすべてのテキストをペイントするので、JTextAreaがペイントする方法とは劇的に異なりますが、コンポーネントはハイライトを持つパーツの周りのみにペイントします。現時点で私はこれと戦っており、正しくペイントすることができますが、もちろんマウス入力は次の問題です。 – Trejkaz

+0

あなたは何をしているのかはっきりしていませんが、JTextAreaですべてをペイントさせることができ、JTextAreaが塗りつぶした部分だけを塗りつぶすことができます。 – jzd

0

イメージ内のJTextAreaをペイントし、イメージの必要な部分を使用します。元のJTextAreaに画像の境界を維持して、計算できる画像をクリックして、JTextAreaをクリックして適切な位置にします。

関連する問題