4

codemirror.jsライブラリを使用してJavaFXで簡単なエディタを作成しています。次のhtml/jsコードを使用して、javafx.scene.web.WebViewコンポーネントを使用してコードミラーエディターをjavafxに埋め込みました。

<body>
<form>
   <textarea id="code" name="code">
   </textarea>
</form>
<script>
   var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true});
</script>
</body>

コードミラーエディタ自体は、元に戻す、やり直し、切り取り、コピー、貼り付けをサポートしています。

アプリケーションにjavafxメインメニューもあり、コピーや貼り付けなどのアクションを追加したいと思います。このmenueアクションをコードミラーエディターに「バインド」したいので、ユーザーがメインメニューから貼り付けるなどをクリックすると、クリップボードのコンテンツがコードミラーエディターに追加されます。

元に戻す操作とやり直し操作でこの問題を解決しました。codemirrorには2つのjs関数undo()とredo()があり、javafx.scene.web.WebView.executeScriptメソッドを介してJavaレベルから呼び出すことができます。

私の質問は、切り取り、コピー、貼り付けの操作をどのように処理するかです。コードミラーエディタを使用してメインメニューからこの操作をバインドするにはどうすればよいですか?この操作を処理できるjs関数がcodemirror.jsに見つかりません。

どんな助けでも感謝し、事前に感謝します。

4

1 に答える 1

6

私は解決策を見つけました: Codmirror には API にカット、コピー、ペーストなどの機能はありませんが、選択したテキストを取得および置換できるため、それらの操作を自分で記述できます。

public void cut() {
    String selectedText = (String) webview.getEngine().executeScript(
            "editor.getSelection();");
    webview.getEngine().executeScript("editor.replaceSelection(\"\");");
    final Clipboard clipboard = Clipboard.getSystemClipboard();
    final ClipboardContent content = new ClipboardContent();
    content.putString(selectedText);
    clipboard.setContent(content);

}

public void copy() {
    String selectedText = (String) webview.getEngine().executeScript(
            "editor.getSelection();");
    final Clipboard clipboard = Clipboard.getSystemClipboard();
    final ClipboardContent content = new ClipboardContent();
    content.putString(selectedText);
    clipboard.setContent(content);
}

public void paste() {
    final Clipboard clipboard = Clipboard.getSystemClipboard();
    String content = (String) clipboard.getContent(DataFormat.PLAIN_TEXT);
    webview.getEngine().executeScript(String.format("editor.replaceSelection(\"%s\");", content));
}
于 2013-01-25T10:32:02.177 に答える