JavaFXWebView:透明WebView保持绘制旧内容

JavaFXWebView:透明WebView保持绘制旧内容,java,javafx,webview,Java,Javafx,Webview,JavaFXWebView可以通过反射变得透明。这允许WebView充当html覆盖 不幸的是,在WebView中显示新内容时出现问题。旧内容保持绘制状态,新内容在旧内容之上绘制 该行为在Java10中不存在,它从Java11开始,在JavaFX15中仍然存在 下面是一个示例,单击黑色文本将新内容加载到WebView中: import java.awt.*; 导入java.lang.reflect.Field; 导入java.lang.reflect.Method; 导入javafx.appli

JavaFXWebView可以通过反射变得透明。这允许WebView充当html覆盖

不幸的是,在WebView中显示新内容时出现问题。旧内容保持绘制状态,新内容在旧内容之上绘制

该行为在Java10中不存在,它从Java11开始,在JavaFX15中仍然存在

下面是一个示例,单击黑色文本将新内容加载到WebView中:

import java.awt.*;
导入java.lang.reflect.Field;
导入java.lang.reflect.Method;
导入javafx.application.application;
导入javafx.beans.value.observeValue;
导入javafx.concurrent.Worker;
导入javafx.scene.scene;
导入javafx.scene.input.MouseEvent;
导入javafx.scene.web.WebEngine;
导入javafx.scene.web.WebView;
导入javafx.stage.stage;
导入javafx.stage.StageStyle;
公共类主扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
新网页(初级阶段);
primaryStage.show();
}
/**
*@param指定命令行参数
*/
公共静态void main(字符串[]args){
发射(args);
}
班级网页{
WebView WebView=新建WebView();
WebEngine WebEngine=webView.getEngine();
公共网页(舞台主流){
场景=新场景(webView);
scene.setFill(null);
主干。场景(场景);
initStyle(StageStyle.TRANSPARENT);
webEngine.getLoadWorker().stateProperty().addListener(this::changed);
webEngine.loadContent(“固定编号:1”);
//单击以在旧内容上方显示旧内容
场景.addEventHandler(MouseEvent.MOUSE_单击,e->{
loadContent(“随机数:“+Math.Random()+”);
});
}

private void changed(observevalue一种解决方法是简单地使用近乎透明的WebView,而不是完全透明的WebView

在上面的代码中,将
新颜色(0,0,0,0)
替换为say
新颜色(0,0,0,1)
。这将导致旧内容被擦除


alpha值为1将使背景几乎看不见。

谢谢。这对我很有帮助。我有一个透明的站点,其中的按钮只有文本。当你将鼠标悬停在按钮上时,它们会变成黑色(不应该是这样)。新颜色(0,0,0,1)解决了问题,使所有内容都透明。JDK 15,JavaFX15。