我试图在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);
有效,但也使包含文本框的内容区域透明。
任何人都可以告知我缺少什么才能让它发挥作用吗?
答案 0 :(得分:0)
以防万一有人仍然需要这样做,我设法通过这样做在 JFXDialog 上有圆角:(以及添加背景半径 tpo 根元素)
.jfx-dialog-overlay-pane > StackPane{
-fx-background-radius: 20;
-fx-background-color: white;
}
我还没有尝试过使用 Dialog,但我猜想解决方案几乎相同。