当前位置: 首页 > 面试题库 >

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

闾丘成双
2023-03-14
问题内容

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

<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编辑器。

我为撤消和重做操作解决了这个问题: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));
}


 类似资料:
  • 我可以使用'yy'和'p'复制并粘贴到我的Vim文件中,但是当我从外部复制一些Python代码并尝试在我的Vim文件中执行'p'时,它只会将最后复制的内容粘贴到我的Vim中。 有没有反正我可以同步我的vim和系统剪贴板??

  • 这应该真的很简单,但我一直在拖网论坛和答案数小时来寻找答案,但没有运气,所以我(不情愿地)创造了一个我自己的问题。 我要做的只是简单地创建一个新工作簿,并将另一个工作簿的范围粘贴到该工作簿中。听起来很简单..? 我原来的工作簿,让我们叫Book1。我试图创建一个新的工作簿,Book2,我将把单元格A1:B10的值复制到其中。 以下是我代码的一个版本(从第一册打开开始): 这会给出一个“Range类

  • 问题内容: 我的.emacs中有(cua-mode t),因此Cc是复制的,而Cv是粘贴的,就像桌面上的其他大多数程序(Ubuntu,Gnome,Linux)一样。但是,Emacs似乎并未与其他程序共享剪贴板/复制缓冲区。 例如,如果我在Firefox中使用Cc,则可以将SCv粘贴到终端中,或者将Cv粘贴到gedit中。但是,如果我在emacs中使用Cv(或Cy),则无法获得从Firefox复制的

  • 我可以使vim粘贴从和到系统的剪贴板?

  • 在一个编码的UI测试中,我试图使用range.copy从excel复制一个动态范围,并通过ctrl+V将其粘贴到wpf网格中。