Тень для прозрачного оповещения не работает JavaFx - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь добавить каплю тени в окно оповещения. Я устанавливаю его стиль прозрачным и initOwner для моей текущей стадии.Тень на кнопке работает, но не на поле предупреждения.Почему dropShadow в .alertBox не работает?Должен ли я поместить тень в другое место?Вот как я создаю предупреждение:

    Alert alert = new Alert(Alert.AlertType.ERROR);
    alert.initOwner(stage);
    alert.initStyle(StageStyle.TRANSPARENT);
    DialogPane dialog = alert.getDialogPane();
    dialog.setGraphic(null);
    dialog.getStyleClass().add("alertBox");

Это мой css:

.alertBox{
    -fx-background-color: #2A2E37;
    -fx-border-color: #363b41;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,1.6) , 5, 0.0 , 0 , 2 );

}
.alertBox > *.button-bar > *.container{
    -fx-background-color: transparent;
    -fx-pref-height: 50
}

.alertBox:header *.header-panel{
    -fx-background-color: transparent;
}
.alertBox:header *.header-panel *.label{
    -fx-font-size: 14px;
    -fx-font-weight: bold;
    -fx-pref-height: 25;
    -fx-text-fill: #363b41;
    -fx-alignment: center;
    -fx-background-color: transparent;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,0) , 0, 0.0 , 0 , 0 );
}
.alertBox > *.label.content{
    -fx-font-size: 12px;
    -fx-text-fill: #bcbcbc;
    -fx-alignment: center;
    -fx-pref-height: 50;
    -fx-padding: 0,0,10,0;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,1.6) , 5, 0.0 , 0 , 2 );
    -fx-background-color: transparent;
}
.alertBox Button{
    -fx-text-fill: #bcbcbc;
    -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,1.6) , 5, 0.0 , 0 , 0);
    -fx-background-color: #2A2E37;
}

Редактировать:

    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    Pane root = new FXMLLoader(LoggedFirstStyle.class.getResource("/FXML/logged-first.fxml")).load();
    Scene scene = new Scene(root);
    scene.getStylesheets().add(LoggedFirstStyle.class.getResource("/css/logged-first.css").toString());
    scene.setFill(Color.TRANSPARENT);

    stage = new Stage();
    stage.initStyle(StageStyle.TRANSPARENT);
    stage.setScene(scene);
    stage.show();
    stage.setWidth(primaryScreenBounds.getWidth());
    stage.setHeight(primaryScreenBounds.getHeight());
    stage.setX(primaryScreenBounds.getMinX());
    stage.setY(primaryScreenBounds.getMinY());

1 Ответ

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

вот очень простой, но рабочий пример окна оповещения с DropShadow, надеюсь, это поможет!

public class Main extends Application {

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

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Drop Shadow!");
        primaryStage.initStyle(StageStyle.DECORATED);
        StackPane root = new StackPane();
        Alert alert = new Alert(Alert.AlertType.ERROR);
        alert.initStyle(StageStyle.TRANSPARENT);
        DialogPane dialog = alert.getDialogPane();
        dialog.setGraphic(null);
        dialog.setStyle(
                "-fx-background-color: #2A2E37; -fx-border-color: #363b41; -fx-effect: dropshadow( three-pass-box , rgba(0,0,0,1.6) , 5, 0.0 , 0 , 2 );"
        );
        root.getChildren().addAll(dialog);
        root.setStyle(
                "-fx-background-color: #ffffff;"
        );
        primaryStage.setScene(new Scene(root, 300, 250));
        primaryStage.show();
    }
}

Outcome AlertBox Drop Shadow

Я не могу приступить к работе с CSS, я не знаю, почему, и у меня не так много времени, чтобы выяснить первопричину извините:)

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