JavaFX中WebView中的透明背景

Mak*_*riy 11 webview javafx-2

我需要在父背景模式上显示我的webview内容.有一种直截了当的方法吗?

小智 13

这可能很有用

final com.sun.webkit.WebPage webPage = com.sun.javafx.webkit.Accessor.getPageFor(engine);
webPage.setBackgroundColor(0);
Run Code Online (Sandbox Code Playgroud)


Har*_*nto 9

Webview透明我在这里得到了一个很好的解决方案:https://javafx-jira.kenai.com/browse/RT-29186阅读评论Harry Hur

    import java.lang.reflect.Field;
    import javafx.application.Application;
    import javafx.beans.value.ChangeListener;
    import javafx.beans.value.ObservableValue; 
    import javafx.scene.Scene;
    import javafx.scene.web.WebEngine;
    import javafx.scene.web.WebView;
    import javafx.stage.Stage;
    import javafx.stage.StageStyle; 
    import org.w3c.dom.Document; `

    public class TestTranparentApps extends Application { 

    @Override
    public void start(Stage primaryStage) {
        new WebPage(primaryStage);
        primaryStage.show(); 
    } 

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

    class WebPage{

        WebView webview;
        WebEngine webengine;
        public WebPage(Stage mainstage){
            webview = new WebView();
            webengine = webview.getEngine();

            Scene scene = new Scene(webview);
            scene.setFill(null);

            mainstage.setScene(scene);
            mainstage.initStyle(StageStyle.TRANSPARENT);
            mainstage.setWidth(700);
            mainstage.setHeight(100);

            webengine.documentProperty().addListener(new DocListener());
            webengine.loadContent("<body style='background : rgba(0,0,0,0);font-size: 70px;text-align:center;'>Test Transparent</body>");
        }

        class DocListener implements ChangeListener<Document>{  
            @Override
            public void changed(ObservableValue<? extends Document> observable, Document oldValue, Document newValue) {
                try {

                    // Use reflection to retrieve the WebEngine's private 'page' field. 
                    Field f = webengine.getClass().getDeclaredField("page"); 
                    f.setAccessible(true); 
                    com.sun.webkit.WebPage page = (com.sun.webkit.WebPage) f.get(webengine);  
                    page.setBackgroundColor((new java.awt.Color(0, 0, 0, 0)).getRGB()); 

                } catch (Exception e) {
                }

            }
        }  
    } 
} 
Run Code Online (Sandbox Code Playgroud)


drz*_*ala 5

如果你有明亮的背景使用

webView.setBlendMode(BlendMode.DARKEN);
Run Code Online (Sandbox Code Playgroud)

然后,当黑暗的背景

webView.setBlendMode(BlendMode.LIGHTEN);
Run Code Online (Sandbox Code Playgroud)

这可能会在一段时间内修复,JavaFX错误跟踪器#RT-25004上会请求此功能


jew*_*sea 1

您可以使用Blend在内容上对 WebView进行色度键设置

更新

我尝试了一下,在 JavaFX 中使用 JavaFX 2.2 的内置混合效果实现真正的色度键实际上相当困难(并且超出了我的实现能力)。我设法使该技术适用于预色度键控的 flv 视频格式,但不适用于 WebView 等任意节点。

不过,目前,您可以使用变暗和变亮效果以简单的方式实现一些类似的效果,正如马蒂尼在他的答案中所建议的那样。它并不完美,但在RT-25004实现或 JavaFX 平台提供更全面的 alpha 合成操作集之前可能已经足够了。