<AI> JavaFX WebView 内の正確な行・列の文字位置を取得するには、 WebEngine.executeScript() メソッドを使用して JavaScript 側から DOM の Selection/Range API や キャレット座標の情報を取得する必要があります WebView 内のテキストエリア()や編集可能な要素を対象とする場合の基本的なアプローチは以下の通りです。 1. グローバルな文字位置(オフセット)の取得 テキストの先頭からの文字数(インデックス)を取得するには、window.getSelection() を利用します。 java WebEngine webEngine = webView.getEngine(); // 現在のキャレットのオフセット(文字位置)を取得するJSコード String jsCode = "var sel = window.getSelection();" + "if (sel.rangeCount > 0) {" + " var range = sel.getRangeAt(0);" + " range.startOffset;" + // 開始位置 "} else { -1; }"; Integer offset = (Integer) webEngine.executeScript(jsCode); System.out.println("カーソル位置(文字オフセット): " + offset); 2. 行・列(行番号と桁数)の算出方法 HTML(DOM)には「行番号」という概念が標準で存在しないため、 取得した文字オフセットから行・列を算出するカスタム JavaScript を記述する必要があります。 javascript function getCursorLineAndColumn(element) { if (!element) return null; // 現在のカーソル位置のオフセットを取得 var sel = window.getSelection(); if (sel.rangeCount === 0) return null; var range = sel.getRangeAt(0); var offset = range.startOffset; // 全テキストを行ごとに分割して行数と列数をカウント var text = element.value || element.textContent; var lines = text.substring(0, offset).split('\n'); var lineIndex = lines.length; // 現在の行(1始まり) var columnIndex = lines[lines.length - 1].length + 1; // 現在の桁(1始まり) return { line: lineIndex, column: columnIndex }; } この JavaScript を executeScript で呼び出すことで、カーソルがある行と列のオブジェクトを受け取ることができます。 3. 画面上の物理的な座標(X, Y)の取得 行や列ではなく、ディスプレイ上のカーソル位置(ピクセル単位)を取得したい場合は、 getRangeAt(0).getBoundingClientRect() を用いるのが一般的です。 java // キャレットの画面上XY座標を取得するJS例 String jsCoords = "var sel = window.getSelection();" + "var rect = sel.getRangeAt(0).getBoundingClientRect();" + "rect.left + ',' + rect.top;"; String coords = (String) webEngine.executeScript(jsCoords); String[] parts = coords.split(","); double x = Double.parseDouble(parts[0]); double y = Double.parseDouble(parts[1]); JavaFX の executeScript の詳細な仕様については、 Oracle の WebEngine ドキュメント で確認できます。実装時は、対象の要素が現在フォーカスを持っていることを事前に確認してください。