我刚刚学习JavaFX,而且我发现几年前,有些人学会了如何使用这些样式制作好的(模态)阶段。
JavaFX模态确认对话框示例:https://gist.github.com/jewelsea/1887631/155d5e052b6ec7d0eaa6f825713f98f8e542152e
我重新创建了这个,但是有些代码已被弃用(构建器)。
所以我想问一下,如果我可以使用当前支持的API创建一个具有圆角(或不是),甚至是阴影的舞台弹出窗口?我的应用程序需要很多弹出阶段,所以我想建立一个很好的风格。
答案 0 :(得分:1)
我会在这里发布答案给那些偶然发现旧例子的人,使用示例中的CSS。我在Java中将场景填充设置为透明,而不是通过CSS(我不知道该怎么做,但这很好)。
// initialize the stage
primaryStage.setTitle("Modal Confirm Example");
final WebView webView = new WebView(); webView.getEngine().load("http://docs.oracle.com/javafx/");
primaryStage.setScene(new Scene(webView));
primaryStage.show();
// initialize the confirmation dialog
final Stage util = new Stage(StageStyle.TRANSPARENT);
util.initModality(Modality.APPLICATION_MODAL);
util.initOwner(primaryStage);
HBox hbox = new HBox();
Pane pane = new Pane(hbox);
Scene scene = new Scene(pane);
Label label = new Label("Will you like this page?");
Button yesButton = new Button("Yes");
Button noButton = new Button("No");
hbox.getChildren().addAll(label, yesButton, noButton);
yesButton.setOnAction(ae -> {
System.out.println("Liked: " + webView.getEngine().getTitle());
primaryStage.getScene().getRoot().setEffect(null);
util.close();
});
noButton.setOnAction(ae -> {
System.out.println("Disliked: " + webView.getEngine().getTitle());
primaryStage.getScene().getRoot().setEffect(null);
util.close();
});
scene.setFill(Color.TRANSPARENT);
scene.getStylesheets().add(Machine.class.getResource("modal-dialog.css").toExternalForm());
pane.getStyleClass().add("modal-dialog-glass");
hbox.getStyleClass().add("modal-dialog-content");
util.setScene(scene);
// show the confirmation dialog each time a new page is loaded.
webView.getEngine().getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State state, Worker.State newState) {
if (newState.equals(Worker.State.SUCCEEDED)) {
primaryStage.getScene().getRoot().setEffect(new BoxBlur());
util.show();
util.toFront();
}
}
});
这是来自问题中链接的示例...(加上一个非功能的根类)。
.root {
-fx-background-color: transparent;
}
.modal-dialog-glass {
-fx-effect: dropshadow(three-pass-box, derive(cadetblue, -20%), 10, 0, 4, 4);
-fx-background-color: derive(cadetblue, -20%);
-fx-background-insets: 12;
-fx-background-radius: 6;
}
.modal-dialog-content {
-fx-padding: 20;
-fx-spacing: 10;
-fx-alignment: center;
-fx-font-size: 20;
-fx-background-color: linear-gradient(to bottom, derive(cadetblue, 20%), cadetblue);
-fx-border-color: derive(cadetblue, -20%);
-fx-border-width: 5;
-fx-background-insets: 12;
-fx-border-insets: 10;
-fx-border-radius: 6;
-fx-background-radius: 6;
}