在javafx应用程序中嵌入的codemirror.js中复制和粘贴
我正在使用codemirror.js库在Java FX中创建简单编辑器。 我使用javafx.scene.web.WebView组件在javafx中嵌入了codemirror编辑器,代码如下:在javafx应用程序中嵌入的codemirror.js中复制和粘贴,java,javascript,javafx,clipboard,codemirror,Java,Javascript,Javafx,Clipboard,Codemirror,我正在使用codemirror.js库在Java FX中创建简单编辑器。 我使用javafx.scene.web.WebView组件在javafx中嵌入了codemirror编辑器,代码如下: <body> <form> <textarea id="code" name="code"> </textarea> </form> <script> var editor = CodeMirror.fromText
<body>
<form>
<textarea id="code" name="code">
</textarea>
</form>
<script>
var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true});
</script>
</body>
var editor=codemirr.fromTextArea(document.getElementById(“code”),{lineNumbers:true});
Codemirror编辑器本身支持撤消、重做、剪切、复制和粘贴
我的应用程序中也有javafx主菜单,我想向其中添加复制或粘贴等操作。我想用我的codemirror编辑器以某种方式“绑定”此菜单操作,因此如果用户单击(例如从主菜单粘贴),剪贴板中的内容将添加到codemirror编辑器
我解决了撤销和重做操作的这个问题:codemirror有两个js函数undo()和redo(),我可以通过javafx.scene.web.WebView.executeScript方法从java级别调用它们
我的问题是如何处理剪切、复制和粘贴操作?如何使用codemirror编辑器从主菜单绑定此操作?我在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));
}