Прозрачный фон WebEngine javafx - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь потерять белый фон на веб-обозревателе, я пытался обойти и другие вещи, но, кажется, ничего не работает

    public static String url = "URL"; //lets say this has a transparent image on it (it does in my case)
public static Scene FrameWorks;
public static StackPane InnerFrame;
public static WebView viewer;
public static WebEngine webEngine;

public static void web() {
    viewer = new WebView();
    webEngine = viewer.getEngine();
    webEngine.executeScript("document.width");
    WebSite(url);
}

public static void WebSite(String URL) {
    webEngine.executeScript("window.location = \""+URL+"\";");
}

public void start(Stage Level) {
    web();
    InnerFrame = new StackPane();
    FrameWorks = new Scene(InnerFrame, 909, 609);
    InnerFrame.getChildren().add(viewer);
    FrameWorks.setFill(Color.TRANSPARENT);
    InnerFrame.setStyle("-fx-background-color: rgba(255, 0, 0, 0);");
    Level.setScene(FrameWorks);
    Level.initStyle(StageStyle.TRANSPARENT);
    Level.show();
}

1 Ответ

0 голосов
/ 13 марта 2019

Я не уверен, что полностью понимаю вашу проблему, поэтому поправьте меня, если я ошибаюсь.Вы хотите, чтобы все, кроме веб-просмотра, было прозрачным?Чтобы более или менее скопировать, вставьте комментарий из другого поста, здесь я (мы) хочу иметь минимальный, полный и проверяемый пример, демонстрирующий проблему.Вы также должны помнить, чтобы проверить, был ли вопрос уже задан и дан ответ, прежде чем задавать свой собственный вопрос.

Теперь, когда я понял это, вот пример, где вы можете увидеть панель стека с чернымфон и веб-просмотр с белым фоном.

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.scene.layout.Background;

public class Main extends Application {


    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Hello World!");
        WebView v = new WebView();
        v.setOpacity(1); // 0 = fully transparent, 1 = fully visible.
        v.setPrefWidth(100);
        v.setMaxWidth(100);
        v.setMaxHeight(100);
        v.setPrefHeight(100);
        v.setStyle("-fx-background-color:black;");
        StackPane root = new StackPane();
        root.getChildren().add(v);
        root.setStyle("-fx-background-color:black;");

        /*
         * Remove the setStyle above, and use either one of these to only have the webview
         * visible. root.setBackground(Background.EMPTY);
         * root.setStyle("-fx-background-color:TRANSPARENT;");
         */

        Scene scene = new Scene(root, 300, 250);
        scene.setFill(Color.TRANSPARENT);

        primaryStage.setScene(scene);
        primaryStage.initStyle(StageStyle.TRANSPARENT);
        primaryStage.show();
    }
}

Если вы удалите строку:

root.setStyle("-fx-background-color:black;");

и замените ее одной из строк, которые в данный момент находятся в комментариях, то теперь вы увидите только веб-просмотр:

/*
 * Remove the setStyle above, and use either one of these to only have the webview
 * visible. 
 * root.setBackground(Background.EMPTY);
 * root.setStyle("-fx-background-color:TRANSPARENT;");
 */

И, конечно, вы также можете установить прозрачность для реального веб-просмотра, если вы хотите сделать это по какой-то причине:

v.setOpacity(0); /*0.0 Fully Transparent - 1.0 Fully Visible*/

Обратите внимание, что для этого мне нужно было установить StageStyleк прозрачному, и, к сожалению, я не уверен, возможно ли это сделать любым другим способом.Может быть, кто-то еще может оставить комментарии, если это возможно или нет.

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...