2016-05-30 5 views
-1

私はJavaFXを勉強しています。数年前、これらのスタイルで素敵な(モーダル)ステージを作る方法を学んだ人がいました。
JavaFXモーダル確認ダイアログボックス例:https://gist.github.com/jewelsea/1887631/155d5e052b6ec7d0eaa6f825713f98f8e542152e これを再作成しましたが、コードの一部は非推奨です(ビルダー)。丸みを帯びたコーナーやドロップシャドウでステージを作成するにはどうすればよいですか?

私は、現在サポートされているAPIを使用して、角を丸くした(またはしない)ステージをポップアップすることができますか?私のアプリケーションは多くのポップアップ段階を必要とするので、いいスタイルを確立したい。

+1

これは廃止予定のビルダーだけですか?それらをコンストラクタへの呼び出しで置き換え、通常の方法でプロパティを設定します。 –

+0

@ James_D、以前はビルダーを使用していませんでしたし、コードを読み込もうとしています。ペインが "modal-dialog-glass"のスタイルクラスを取得し、hboxが "modal-dialog-content"のスタイルクラスを取得するように見えますが、シーンコンストラクタの最後には透明色があります?私はシーンを透明にする方法を考え出していない。 –

+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; 
} 
関連する問題