<AI>
JavaFXの WebView で表示したHTML画面からエディタへ行番号を渡すには、
「JavaScriptからJavaメソッドを呼び出す仕組み (JSBridge)」 を利用します。
主な実装手順は以下の通りです。
1. Java側でコールバック用クラスを作成する
WebView上のJavaScriptから呼び出されるメソッド
(例:jumpToLine(int lineNum))を持ったクラスを作成します。
java
public class EditorBridge {
// JavaScriptから呼ばれるメソッド
public void jumpToLine(int lineNum) {
System.out.println("エディタの " + lineNum + " 行目へジャンプします");
// ここにエディタのフォーカス移動や選択行変更の処理を記述します
}
}
2. WebView の window オブジェクトに登録する
WebEngine.executeScript() を使用して、
JavaのインスタンスをJavaScriptの window オブジェクトのプロパティとして公開します。
java
// WebView読み込み完了後にJavaScriptへJavaインスタンスをバインド
webEngine.getLoadWorker().stateProperty().addListener((obs, oldState, newState) -> {
if (newState == javafx.concurrent.Worker.State.SUCCEEDED) {
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("editorBridge", new EditorBridge());
}
});
3. JavaScript側から呼び出す
HTML内のJavaScriptで window.editorBridge.jumpToLine(行番号) を呼び出します。
javascript
// 例:クリックイベント等で実行
function onLineClicked(lineNumber) {
if (window.editorBridge) {
window.editorBridge.jumpToLine(lineNumber);
}
}
この連携により、WebView上のHTMLからJava側エディタの行ジャンプ機能などを呼び出せます。