JavaFX WebView滚动问题中的Ace编辑器(大步长)

时间:2015-11-02 15:16:03

标签: javafx javafx-2 javafx-8 ace-editor javafx-webengine

我正在使用嵌入在JavaFX中的WebView中的ace编辑器,但是在滚动时面临一些小问题。

滚动不是连续的,而是以大步长跳跃。

如果有人在此之前遇到过此问题并修复此问题?任何帮助,将不胜感激。 (以下是嵌入在webview中的ace编辑器演示)。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class AceEditorExample extends Application {

    @Override
    public void start(Stage primaryStage) {
        WebView webView = new WebView();

        webView.getEngine().load("https://ace.c9.io/demo/emmet.html");
        AnchorPane.setLeftAnchor(webView, 0d);
        AnchorPane.setTopAnchor(webView, 0d);
        AnchorPane.setRightAnchor(webView, 0d);
        AnchorPane.setBottomAnchor(webView, 0d);

        primaryStage.setScene(new Scene(new AnchorPane(webView), 400, 300));
        primaryStage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

1 个答案:

答案 0 :(得分:2)

获得更流畅的滚动的解决方案相对容易:

首先,您需要拥有html文件的本地副本。下载emmet.html和所需的js文件。

编辑html文件,找到定义editor的脚本:

<script>
...
require(["ace/ace", "ace/ext/emmet"], function(ace) {
    var editor = ace.edit("editor");
    editor.session.setMode("ace/mode/html");
    ...
}); 
</script>

您可以在此处调整滚动速度。这对我来说很好:

<script>
...
require(["ace/ace", "ace/ext/emmet"], function(ace) {
    var editor = ace.edit("editor");
    editor.session.setMode("ace/mode/html");

    // Adjust scrolling speed:
    editor.setScrollSpeed(0.05);
    ...
}); 
</script>

现在保存文件。

第二部分应该像加载本地emmet.html

一样简单
webEngine.load(getClass().getResource("emmet.html").toExternalForm());

但是由于JDK 8u60中的bug,在修复之前,您可能需要使用解决方法:

  • 使用Dropbox或类似方法托管html和js文件,以获得在线网址。
  • 处理读取html文件的本地字符串(我不确定这是否适用于js所需文件)。