Редактор Ace в проблемах прокрутки JavaFX WebView (большой размер шага)

Я работаю с редактором ace Editor, встроенным в WebView в JavaFX, но здесь возникает небольшая проблема с прокруткой.

Прокрутка не является непрерывной, а скорее прыгает с большим шагом.

Если кто-нибудь сталкивался с этим раньше и исправил это? Любая помощь будет оценена по достоинству. (Ниже представлена ​​демонстрация редактора ace, встроенная в webview).

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);
    }
}

person Ashish    schedule 02.11.2015    source источник


Ответы (1)


Решение для более плавной прокрутки относительно простое:

Во-первых, вам нужно иметь локальную копию 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, пока она не будет исправлена, вам может понадобиться использовать обходной путь:

  • используйте Dropbox или аналогичный для размещения файлов html и js, чтобы иметь онлайн-адрес.
  • обработайте локальную строку, читающую html-файл (я не уверен, что это будет работать с необходимыми файлами js).
person José Pereda    schedule 02.11.2015