【问题标题】:Implementing the Ace Code Editor in JavaFX在 JavaFX 中实现 Ace 代码编辑器
【发布时间】:2019-10-19 17:32:50
【问题描述】:

我正在尝试使用 JavaFX 制作代码编辑器,并希望使用 Ace。我看到之前的一篇文章使用 WebView 来实现这一点,但我对如何预先设置我的项目结构有点迷茫。

【问题讨论】:

    标签: java javafx ace-editor


    【解决方案1】:

    以下是 JavaFX 的 WebView 和 Ace 编辑器的一个非常小的实现。

    首先,我将使用来自 Ace repository 的一些必需的 js 文件:

    • editor.html,这是主要条目。从here 下载,并将其添加到资源文件夹中,例如:src/main/resources/ace/editor.html
    • mode-java.js,从here下载,并添加到资源:src/main/resources/ace/js/mode-java.js
    • theme-eclipse.js,从here下载,并添加到资源:src/main/resources/ace/js/theme-eclipse.js

    请注意,以上项目结构对应使用 Maven 或 Gradle 构建工具。开始时,我使用了这个project 作为参考。

    现在编辑editor.html 文件,并将现有脚本替换为:

    <script src="js/ace.js" type="text/javascript" charset="utf-8"></script>
    <script>
        var editor = ace.edit("editor");
        editor.setTheme("ace/theme/eclipse");
        editor.session.setMode("ace/mode/java");
    </script>
    

    或者,用一些java代码替换javascript函数,比如:

    <pre id="editor">package com.ace.editor;
    
    import java.util.ArrayList;
    
    public class AceEditor {
    
        /*
         * This is a demo
         */
        public static void main(String[] args) {
            System.out.println("Hello World");
        }
    }</pre>
    

    最后,在您的 JavaFX 代码中,添加一个 WebView 控件,然后加载编辑器:

    WebView webView = new WebView(); 
    WebEngine webEngine = webView.getEngine();
    webEngine.load(getClass().getResource("/ace/editor.html").toExternalForm());
    Scene scene = new Scene(webView, 600, 400);
    ...
    

    请注意,您需要添加javafx.web 模块。这是使用 Gradle,但同样可以使用 Maven。

    javafx {
        version = "13"
        modules = [ 'javafx.web' ]
    }
    

    构建并运行项目,你应该会得到代码编辑器:

    更多功能可以通过修改editor.html文件,添加更多js文件,扩展编辑器选项。例如,this 表明您可以添加状态栏。

    编辑

    这是我的项目结构:

    (它也使用 FXML,但不会改变上述任何内容)。

    【讨论】:

    • 只有 editor.html、mode-java.js 和 theme-eclipse.js 包含在 Java 项目中吗?
    • 与 ACE 相关,是的,只有这 3 个。这应该可以帮助您入门,但当然,您还可以包含更多内容。
    • 我能够显示 editor.html 文件,但整个 &lt;script src="js/ace.js" type="text/javascript" charset="utf-8"&gt;&lt;/script&gt; &lt;script&gt; var editor = ace.edit("editor"); editor.setTheme("ace/theme/eclipse"); editor.session.setMode("ace/mode/java"); &lt;/script&gt; 没有任何影响(注释掉没有改变)。 Webview 只是显示了预先存在的代码,但它是不可变的并且没有配色方案。添加 ace.js 文件抑制了 3 个文件中显示的错误,但由于它仍然不起作用(同样的问题),我怀疑我仍然缺少其他东西......
    • @GL 我已经用项目结构编辑了我的答案。确保你有相同的,至少在你的资源范围内。
    • 谢谢!实际上我刚刚重新启动了我的 IDE,它开始工作而没有任何新的更改,不知道发生了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多