Transparent background in the WebView in JavaFX

后端 未结 6 1927
后悔当初
后悔当初 2020-12-19 00:50

I need to show my webview content over parent background pattern. Is there a straightforward way to do it?

6条回答
  •  -上瘾入骨i
    2020-12-19 01:30

    Webview transparent I get a good solution here : https://javafx-jira.kenai.com/browse/RT-29186 read comments 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("Test Transparent");
            }
    
            class DocListener implements ChangeListener{  
                @Override
                public void changed(ObservableValue 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) {
                    }
    
                }
            }  
        } 
    } 
    

提交回复
热议问题