2016-05-30 76 views
-1

我剛剛學習JavaFX,並且我發現在幾年前,一些人學會了如何用這些樣式製作漂亮的(模態)階段。
JavaFX模式確認對話框示例:https://gist.github.com/jewelsea/1887631/155d5e052b6ec7d0eaa6f825713f98f8e542152e 我重新創建了這個確定,但是一些代碼已被棄用(構建器)。如何製作帶圓角或陰影的舞臺?

所以我想問一下,如果我可以使用當前支持的API彈出一個具有圓角(或不是),甚至可能是dropshadows的舞臺嗎?我的應用程序需要很多彈出式的階段,所以我想建立一個不錯的風格。

+1

這只是建設者被棄用,不是嗎?只需將它們替換爲對構造函數的調用,並以通常的方式設置屬性即可。 –

+0

@James_D,我之前沒有使用過構建器,並且正在嘗試讀取代碼。它看起來像窗格獲得了「模態對話框玻璃」的樣式類,並且hbox獲得了「模態對話框內容」的樣式類,但是在場景構造器的末端有一個透明的顏色?我還沒有想出如何將場景設置爲透明。 –

+0

@James_D,nm1我不認爲我可以做到,但我明白了。謝謝。 –

回答

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; 
}