前情提要
- 瀏覽器插件從自帶的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"
);