复制并粘贴嵌入在javafx应用程序中的codemirror.js

时间:2012-12-18 08:55:36

标签: java javascript javafx clipboard codemirror

我正在使用codemirror.js库在Java FX中创建简单的编辑器。 我使用javafx.scene.web.WebView组件在javafx中嵌入了codemirror编辑器,其中包含以下html / js代码:

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

Codemirror编辑器本身支持撤消,重做,剪切,复制和粘贴。

我的应用程序中还有javafx主菜单,我想添加复制或粘贴等操作。我想以某种方式“绑定”这个菜单操作与我的代码镜像编辑器,所以如果用户点击例如从主菜单粘贴,剪贴板中的内容将添加到codemirror编辑器中。

我解决了这个问题撤消和恢复操作:codemirror具有两个JS功能撤消()和重做()和I可以从经由javafx.scene.web.WebView.executeScript方法Java级别调用它们

我的问题是如何处理剪切,复制和粘贴操作?如何使用codemirror编辑器将此操作与主菜单绑定?我在codemirror.js中找不到任何可以处理此操作的js函数。

任何帮助表示感谢并提前感谢。

1 个答案:

答案 0 :(得分: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));
}