前情提要
- 浏览器插件从自带的WebView 改成 JxBrowser 提供的 BrowserView
- 使用
primaryStage.initStyle(StageStyle.TRANSPARENT);
模式去掉了系统自带的标题栏 , 此时如果再使用BrowserType.HEAVYWEIGHT
重量级模式, 就无法拖拽, 所以必须使用 轻量级模式BrowserType.LIGHTWEIGHT
, 但是这就导致渲染卡顿, 没有重量级模式 流畅.
重点来了
- 使用 fxml 配置 是默认 重量级模式的:
<?import com.teamdev.jxbrowser.chromium.javafx.BrowserView?>
<?import javafx.scene.layout.VBox?>
<fx:root type="javafx.scene.layout.VBox" maxHeight="-Infinity" maxWidth="-Infinity"
minHeight="-Infinity" minWidth="-Infinity"
prefHeight="900.0" prefWidth="1200.0" xmlns:fx="http://javafx.com/fxml">
<!--使用这种方式生成的BrowserView默认的BrowserType是重量级的,会覆盖之前的插件,导致无法拖拽-->
<!--改用代码中新建对象的方式,可以初始化为轻量级的,就可以拖拽-->
<BrowserView fx:id="contentWeb" prefHeight="900.0" prefWidth="1200.0"></BrowserView>
</fx:root>
- 所以需要改成代码生成的形式, 指定为轻量级模式.
BrowserView contentWeb = new BrowserView(new Browser(BrowserType.LIGHTWEIGHT));
contentWeb.setPrefWidth(1200.0);
contentWeb.setPrefHeight(900.0);
root.getChildren().add(contentWeb);
这下可以拖拽了, 但是渲染慢是个大问题
该怎么办呢?
王牌来了
官方提供了加速的功能: 添加一下这句即可:
// 加速轻量级Browser
BrowserPreferences.setChromiumSwitches(
"--disable-gpu",
"--disable-gpu-compositing",
"--enable-begin-frame-scheduling",
"--software-rendering-fps=60"
);