как сделать прозрачную сцену и сцену в javafx?

Я хочу иметь прозрачный индикатор прогресса, который не определен.

вот код, он показывает состояние/сцену на сером фоне. Я хотел полностью прозрачным.

Я пробовал следующий код, но он показывает непрозрачный фоновый этап.

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

    }

выход


person javafan    schedule 02.12.2015    source источник
comment
Относится к: прозрачный фон окна javafx с украшениями.   -  person jewelsea    schedule 02.12.2015


Ответы (3)


Для modena.css (определение внешнего вида JavaFX по умолчанию в Java 8) был введен легкий затененный фон для всех элементов управления (а также для панелей, если элемент управления загружен).

Вы можете удалить это, указав, что фон по умолчанию прозрачен. Это можно сделать, добавив следующую строку в файл CSS вашего приложения:

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

Это в дополнение к другим настройкам, уже имеющимся в вашем коде, для инициализации стиля рабочей области и фоновой заливки сцены.

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

Примечание. В примере кода вопросов создается дополнительный этап (initStage) вместо использования переданного этапа для метода запуска. Пройденный этап может быть инициализирован, использован и показан непосредственно вашим кодом, а не созданием дополнительного initStage.

person jewelsea    schedule 02.12.2015
comment
Учебники по JavaFX слишком плохо упоминают такие вещи. Такое ощущение, что их код терпит неудачу в 50% случаев из-за таких сюрпризов :-(. Потратил на это 2 часа, пока не сдался и не нашел ваше решение. Спасибо, приятель! - person brat; 01.06.2021

stage.initStyle(StageStyle.TRANSPARENT);

это для скрытия верхней панели (свернуть, восстановить вниз и закрыть)

scene.setFill(Color.TRANSPARENT);

это для цвета рамки (вы можете заменить ПРОЗРАЧНЫЙ на любой цвет ЗЕЛЕНЫЙ ЖЕЛТЫЙ КРАСНЫЙ СИНИЙ ...), но для меня я хочу видеть стекло, если вы меня понимаете, и с другим цветом, поэтому решение

primaryStage.setOpacity(0.2);

Число 0,2 находится между 0 и 1. 0 скрыто, а 1 является нормальной формой, но между числами прозрачно, поэтому выберите свое число и запустите свою программу и посмотрите, это то, что вы хотите, есть этот код для полноэкранного режима.

primaryStage.setFullScreen(true);

и в файле css сделайте это

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

и вы можете изменить цвет, изменив номер в rgba(0,0,0,1)

person Sona    schedule 24.03.2017

Это работает для меня.

Parent root = FXMLLoader.load(getClass().getResource("login.fxml"));
Scene scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
stage.setScene(scene);
stage.initStyle(StageStyle.TRANSPARENT);
stage.show();

Вам просто нужно в основном 2 вещи:

scene.setFill(Color.TRANSPARENT);
stage.initStyle(StageStyle.TRANSPARENT);
person Abdul.Moqueet    schedule 13.08.2019
comment
На JavaFX 10 у меня это не работает, scene.setFill требует Paint, а не int. - person Guillaume F.; 28.03.2020
comment
@Гийом Ф. Color происходит от Paint (это подкласс). И Color.TRANSPARENT — это Color ( который является Paint) и не является int. Так что настройка заливки на прозрачный цвет — это нормально. Это решение должно работать нормально, если в сцене не участвует Control, и в этом случае также требуется дополнительная настройка CSS, обсуждаемая в других ответах. - person jewelsea; 02.06.2021