我會在這裏發佈答案,對於那些像我一樣絆倒舊例子的人,使用示例中的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;
}
這只是建設者被棄用,不是嗎?只需將它們替換爲對構造函數的調用,並以通常的方式設置屬性即可。 –
@James_D,我之前沒有使用過構建器,並且正在嘗試讀取代碼。它看起來像窗格獲得了「模態對話框玻璃」的樣式類,並且hbox獲得了「模態對話框內容」的樣式類,但是在場景構造器的末端有一個透明的顏色?我還沒有想出如何將場景設置爲透明。 –
@James_D,nm1我不認爲我可以做到,但我明白了。謝謝。 –