当前位置: 首页 > 知识库问答 >
问题:

无法粘贴到JavaFX WebView上的ACE编辑器中

佟和平
2023-03-14

我正在开发一个小型JavaFX应用程序。我想嵌入一个Lua编辑器。我正在通过WebView节点在我的应用程序中使用ACE编辑器。编辑器完美加载;但是,我不能通过鼠标事件和键盘事件粘贴任何文本,无论文本是从哪里复制的。这是已知的虫子吗?

HTML文件:

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>Lua Editor</title>
        <style type="text/css" media="screen">
            #editor { 
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
            }
        </style>
    </head>
    <body>
        <div id="editor"></div>
        <script src="ace.js" type="text/javascript" charset="utf-8"></script>
        <script>
            var editor = ace.edit("editor");
            editor.getSession().setMode("ace/mode/lua");
            editor.setOptions({
                fontSize: "11pt"
            });
        </script>
    </body>
</html>

Java代码段:

@FXML
private WebView scriptEditor;

private void initializeCardScript() {
    scriptEditor.getEngine().load("path to HTML file");
}

共有1个答案

钮鸿煊
2023-03-14

在JoséPereda的建议下,我能够通过Ctrl+V键事件粘贴文本。但我无法用鼠标单击复制/剪切/粘贴对话框粘贴。

通过创建一个从Javascript到Java的沟通桥梁,我完全解决了我的问题。我在ACE Editor中对粘贴事件调用一个Java方法。

Java代码段:

private void initializeCardScript() {
    scriptEditor.getEngine().load("path to HTML file");
    ((JSObject) scriptEditor.getEngine().executeScript("window")).setMember("java", new Object() {
        public void paste() {
            String content = (String) Clipboard.getSystemClipboard().getContent(DataFormat.PLAIN_TEXT);
            if (content != null) {
                scriptEditor.getEngine().executeScript("editor.onPaste(\"" + content.replace("\n", "\\n") + "\");");
            }
        }
    });
}

ace.js:

var onPaste = function(e) {
    java.paste();
//  var data = handleClipboardData(e);
//  if (typeof data == "string") {
//      if (data)
//          host.onPaste(data, e);
//      if (useragent.isIE)
//          setTimeout(resetSelection);
//      event.preventDefault(e);
//  }
//      else {
//          text.value = "";
//          pasted = true;
//      }
};

资料来源:

https://stackoverflow.com/A/25676561/3956070

https://blogs.oracle.com/javafx/entry/communication_between_javascript_and_javafx

 类似资料:
  • ACE 是一个实现了语法着色功能的基于 Web 的代码编辑器,具有良好的代码提示功能和大量的主题,所以在 Web 端你想拥有一个编辑器,ACE 是不二选择。 官网:https://ace.c9.io/

  • 我正在我的网站上使用Ace编辑器(到目前为止已经很棒了!)。我需要捕捉编辑更改的每一个时刻的一些文本。我给编辑器的id是“ACE_JavaScript_Editor”。当我使用: 每当我向编辑器添加文本时,它就会激发,但当我在编辑器中删除文本时,它不会激发。对于一个看似简单的问题,我还没有找到一个优雅的解决方案。根据我的经验和我在网上读到的东西,“KeyUp”和“KeyDown”在Ace edit

  • 我正在测试ace-editor显示服务器上的大型文本文件。由于它吹嘘能够处理高达4百万行的文件,并且具有文本高亮显示功能,这使它成为一个很好的候选者。 我一直在努力理解Ace Editor的文档和EditSession。根据我的理解,它可以告诉ace editor从一个文件中读取并显示它。 我正在使用createEditSessiont()创建会话并指定文档。在api文档中: createEdit

  • 我有一个生成Word文档的Excel工作簿。它会将Excel图像复制到生成的Word文档的标题中。此代码已在Office 2003、2007和2010中运行,但现在在2013年,它在粘贴语句上失败,在粘贴方法中出现了一个通用的自动化错误。我希望有人能帮我在Office 2013中完成这项工作。若要复制,请使用包含单个形状的名为“徽标”的工作表定义宏工作簿,添加以下代码,然后执行doctop子例程:

  • 结果如下: 我可以做什么来使这个返回'somefunc_linux'?。Clang似乎做得很对,顺便说一句。

  • 我使用重定向脚本将行复制到新的电子表格。当我输入正确的单元格值(“一次性服务”进入第3列)时,工作正常。但是我有我的电子表格与Zapier链接,当值被Zap/粘贴进去时,该行不会被复制。