web-dev-qa-db-fra.com

comment créer une scène et une scène transparentes dans javafx?

Je veux un indicateur de progrès transparent, qui est indéfini.

voici le code, il montre l'état/scène de fond gris. Je voulais totalement transparent.

J'ai essayé de suivre le code, mais il montre une étape de fond qui n'est pas transparente.

package application;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.ProgressIndicator;
import javafx.scene.layout.VBox;
import javafx.scene.Paint.Color;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

    public class Main extends Application {

        @Override
        public void start(Stage stage) {
            /*
             * 
             * my css file content:
             * 
             * .progress-indicator .indicator { -fx-background-color: transparent;
             * -fx-background-insets: 0; -fx-background-radius: 0;
             * 
             * } .progress-indicator { -fx-progress-color: green ; }
             * 
             * 
             * 
             */
            Stage initStage = new Stage();

            initStage.initStyle(StageStyle.TRANSPARENT);
            ProgressIndicator loadProgress = new ProgressIndicator();
            loadProgress.setSkin(null);
            loadProgress.setPrefWidth(50);
            VBox box = new VBox();
            box.getChildren().add(loadProgress);
            final Scene scene = new Scene(box, 150, 150);

            scene.setFill(Color.TRANSPARENT);

            initStage.setScene(scene);
            scene.getStylesheets().add("application.css");

            initStage.show();

        }

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

    }

 output

8
javafan

Pour modena.css (définition par défaut de l'apparence JavaFX dans Java 8), un léger arrière-plan ombré a été introduit pour tous les contrôles (et également pour les volets si un contrôle est chargé).

Vous pouvez supprimer en spécifiant que l'arrière-plan par défaut est transparent. Cela peut se faire en ajoutant la ligne suivante dans le fichier CSS de votre application:

.root { -fx-background-color: transparent; }

Cela s'ajoute aux autres paramètres que vous avez déjà dans votre code pour initialiser le style de la scène et le remplissage de l'arrière-plan de la scène.

stage.initStyle(StageStyle.TRANSPARENT);
scene.setFill(Color.TRANSPARENT);

Remarque: dans l'exemple de code des questions, une étape supplémentaire (initStage) est créée au lieu d'utiliser l'étape transmise pour la méthode de démarrage. L'étape passée peut être initialisée, utilisée et affichée directement par votre code plutôt que de créer un initStage supplémentaire.

19
jewelsea

stage.initStyle(StageStyle.TRANSPARENT);
Ceci est pour masquer la barre supérieure (minimiser, restaurer et fermer)

scene.setFill(Color.TRANSPARENT);
ceci concerne la couleur du cadre (vous pouvez remplacer TRANSPARENT par n’importe quelle couleur VERT JAUNE ROUGE BLEU ...)
mais pour moi, je veux une vue en verre si vous pouvez me comprendre,
et de couleur différente
donc la solution est

 primaryStage.setOpacity(0.2);


le nombre 0.2 est compris entre 0 et 1
0 est caché et 1 est une forme normale mais entre les chiffres transparents
alors choisissez votre numéro et lancez votre programme et voyez si c'est ce que vous voulez
il y a ce code pour le plein écran

 primaryStage.setFullScreen(true);<br>

et dans le fichier css le faire

.root { -fx-background-color:rgba(0,0,0,1); }<br>

et vous pouvez changer la couleur avec changé le nombre dans rgba (0,0,0,1)

2
Sona