Прозрачный фоновый веб-движок javafx

#java #javafx

#java #javafx

Вопрос:

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

     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:

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

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

 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;");
  

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

 /*
 * 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;");
 */
  

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

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

Пожалуйста, обратите внимание, что для этого мне пришлось установить для StageStyle значение transparent, и, к сожалению, я не уверен, возможно ли это сделать каким-либо другим способом. Возможно, кто-то другой может добавить комментарии, если это возможно или нет.

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

Комментарии:

1. К сожалению, это не сработало ссылка , поэтому основа php-файла прозрачна, но по какой-либо причине веб-просмотрщик имеет белый фон, есть идеи, как это изменить

2. Я не думаю, что вы можете изменить фон фактического webview, если я буду честен, поскольку он используется для отображения чего-то, что вы не можете контролировать, например, веб-страницы с собственным цветом фона. Я думал, что вы в значительной степени хотели отображать только webview, поэтому я неправильно понял вопрос. Кроме того, по одному только изображению мы не можем определить, является ли это на самом деле webview или, возможно, белым цветом фона сцены или стековой панели. Минимальный, но доступный для выполнения пример вместе с fxml и css очень полезен для того, чтобы оказать вам наилучшую помощь, какую мы можем.