2

重複の可能性:
JTextArea の行

JTextArea では、選択、強調表示などの操作はすべて、テキストの先頭からのオフセットに依存しているようです。行指向のテキストを表示するアプリでは、行と列に基づいて (キャレットではなく、他の場所からの情報に基づいて) 選択、強調表示する必要があります。

行、列からオフセットを取得する機能が組み込まれているか、ヘルパー クラスに組み込まれていますか? 行開始オフセットなどで個別のデータを維持し、行、列->オフセットを計算できることはわかっていますが、確かにJTextArea(またはそのモデル)はテキストを表示するためにこれをすでに知っているので、すでに存在しているに違いないと確信していますこれを行う方法。

textarea.viewToModel(new Point(x,y)); を使用して、このようなものを使用する例を見ましたが、x と y は行、列とされていましたが、私が見る限り、x と y はピクセルです行、列ではなく座標...だから、どうすればいいのかわからない。

手がかり?ありがとう!

編集済み:したがって、これは他の質問と重複しているという5人のコメント投稿者の印象を受けて、質問は閉じられましたが、そうではありません. オフセットを行、列に変換する方法や、画面のピクセル座標をオフセットに変換する方法については質問しませんでした。これについては、他の記事で説明しています。

私が実際に尋ねたことに対する答えを探して他の誰かがここでつまずいた場合、私は今、それが次のようであることを発見しました.

JTextArea には期待していた機能がありますが、以前のブラウジングでは明らかに見落とされていました: getLineStartOffset(int line) は、テキストの特定の行 (行) のテキスト開始からのオフセットを提供します。これに char-posn-in-line を簡単に追加して、特定の文字のオフセットに到達できます。

4

2 に答える 2

2

textArea には、テキストのストリームが含まれています。テキストに可変幅の文字や異なるフォント サイズが含まれている場合はあいまいになる可能性があるため、テキスト モデル内の行/列を特定する魔法の方法はありません。 データに関して特定の (行、列) が何を意味するかという考えからマッピングに必要なデータを維持する必要があります。

于 2012-11-20T03:01:36.553 に答える
2

これは、長方形のフラグメント選択の簡単な例ですhttp://java-sl.com/tip_vertical_selection.html

javax.swing.text.Utilities.getRowStart()/getRowEnd() メソッドを使用できます。まず、行番号の開始行オフセットを見つけます。次に、列番号を追加してオフセットを取得します。

于 2012-11-20T05:59:17.077 に答える