JavaFX WebView 滚动问题中的 Ace Editor(大步长)
Ace Editor in JavaFX WebView Scrolling Issues (large step size)
我正在使用嵌入在 JavaFX 中的 WebView 中的 ace 编辑器,但在滚动方面遇到了一个小问题。
滚动不是连续的,而是以大步长跳跃。
如果有人以前遇到过这个问题并解决了这个问题?任何帮助,将不胜感激。
(以下是嵌入webview的ace编辑器demo)
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);
}
}
获得更平滑滚动的解决方案相对简单:
首先,您需要有一份 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 文件,以便在线 url。
- 处理读取 html 文件的本地字符串(我不确定这是否适用于 js 所需的文件)。
我正在使用嵌入在 JavaFX 中的 WebView 中的 ace 编辑器,但在滚动方面遇到了一个小问题。
滚动不是连续的,而是以大步长跳跃。
如果有人以前遇到过这个问题并解决了这个问题?任何帮助,将不胜感激。 (以下是嵌入webview的ace编辑器demo)
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);
}
}
获得更平滑滚动的解决方案相对简单:
首先,您需要有一份 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 文件,以便在线 url。
- 处理读取 html 文件的本地字符串(我不确定这是否适用于 js 所需的文件)。