1

JTextArea内の単語セットのすべての一致を、いくつかのコンテキスト(N行、おそらくユーザー構成可能)とともに表示するコンポーネントがあります。

私はすでに一致を強調表示するためのコードを持っているので、それらのオフセットを知っているので、それらの境界を決定できます。テキストの行の高さがわかっているので、ペイントするコンテキスト領域の境界を決定できます。

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

編集:実際には、JTextAreaが提供する行からオフセットへのマッピングでは折り返し行がカウントされないため、コンテキスト領域の境界を特定できないようです。

4

3 に答える 3

2

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

あなたが望むことをするJViewportのようなクラス(コンポーネントの親でなくてもコンポーネントのビューをペイントする)を私は知りませんが、あなたの場合、同じものを共有する2つのJTextAreasを使用することでほとんど同じことを達成できます書類。そうすれば、(必要に応じて)カレットの動きを同期させるだけでよいと思います。

于 2011-02-28T23:55:56.507 に答える
0

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

于 2011-03-01T01:39:41.047 に答える
0

JTextArea を画像にペイントし、画像の必要なフラグメントを使用します。画像の境界を元の JTextArea に保持するため、画像をクリックして計算し、JTextArea をクリックして適切な位置を取得します。

于 2011-03-01T06:38:42.333 に答える