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

标签 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 编辑器“绑定(bind)”,因此如果用户单击例如从主菜单粘贴,剪贴板中的内容将被添加到代码镜像编辑器中。

我解决了撤消和重做操作的这个问题:codemirror 有两个 js 函数 undo() 和 redo(),我可以通过 javafx.scene.web.WebView.executeScript 方法从 java 级别调用它们。

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

感谢任何帮助并提前致谢。

最佳答案

我找到了解决方案: 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));
}

关于java - 复制并粘贴到 javafx 应用程序中嵌入的 codemirror.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13929371/

相关文章:

javascript - 通过JS删除HTML的节点

java - 即使不可见,如何让tableRow闪烁? (JavaFX)

java - 在形状 javafx 周围绘制边框

java - 在 updateProgress 期间将文本附加到 JavaFX TextArea

java - 如何在ImageView java android上设置位图

java - 您使用 ARM Jazelle 的体验如何?

javascript - 如何在数组中的字符串中开始一个新行?

java - 如何将第 3 方 JAR 添加到 jGRASP 中的编译时类路径?

java - 将单维数组转换为多维数组

JavaScript 数组填充