Java Fx 8 Dialog圆角

时间:2015-10-29 17:54:00

标签: javafx-8

我试图在Java Fx 8中使用新的Dialog类来进行模态对话 圆角,在显示时位于主舞台上方。

我有以下代码:

Dialog dialog;



        dialog = new Dialog<>();

              Stage dialogStage = (Stage) dialog.getDialogPane().getScene().getWindow();
        dialogStage.initStyle(StageStyle.TRANSPARENT);
           DialogPane dialogPane = dialog.getDialogPane();
               dialogPane.setStyle("-fx-background-radius: 15 15 15 15;fx-background-color:
transparent;-fx-border-radius: 0 0 0 0;");

dialogPane.getStylesheets().add(getClass().getResource("dialogstyle.css").toExternalForm());
        dialogPane.getStyleClass().add("myDialog");

dialog.setTitle("Dialog Example");
dialog.setHeaderText("This is a custom dialog.");
dialog.setResizable(true);

Label label1 = new Label("Name: ");
Label label2 = new Label("Phone: ");
TextField text1 = new TextField();
TextField text2 = new TextField();

GridPane grid = new GridPane();
grid.add(label1, 1, 1);
grid.add(text1, 2, 1);
grid.add(label2, 1, 2);
grid.add(text2, 2, 2);
dialog.getDialogPane().setContent(grid);

ButtonType buttonTypeOk = new ButtonType("Okay", ButtonData.OK_DONE);
dialog.getDialogPane().getButtonTypes().add(buttonTypeOk);

加上代码隐藏和显示对话框等。

我结合了以下css样式表:

.myDialog{
    -fx-background-color:rgba(0, 0, 0, 0);
    -fx-background-radius: 15 15 0 0;
    -fx-background-insets: 0, 1, 2;
    -fx-border-radius: 0 0 0 0;
}

.myDialog > *.button-bar > *.container{
    -fx-background-color: #a9e200;
    -fx-background-radius: 0 0 15 15;

}
.myDialog > *.label.content{
    -fx-font-size: 14px;
    -fx-font-weight: bold;
}
.myDialog:header *.header-panel{
    -fx-background-color: #a59c31;
    -fx-background-radius: 15 15 0 0;

}
.myDialog:header *.header-panel *.label{
    -fx-font-size: 18px;
    -fx-font-style: italic;
    -fx-fill: #292929;
}

这是基于以下帖子:

Styling default JavaFX Dialogs

这很接近,但结果对话框有白色硬边,看起来是它的一部分 场景。

添加

dialogPane.getScene().setFill(Color.TRANSPARENT);

有效,但也使包含文本框的内容区域透明。

任何人都可以告知我缺少什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

以防万一有人仍然需要这样做,我设法通过这样做在 JFXDialog 上有圆角:(以及添加背景半径 tpo 根元素)

.jfx-dialog-overlay-pane > StackPane{
-fx-background-radius: 20;
-fx-background-color: white; 
}

我还没有尝试过使用 Dialog,但我猜想解决方案几乎相同。