3

ControlsFX ダイアログを使用して情報を表示していますが、アプリケーションのスタイルが青ではなく、ダイアログのスタイル (色、境界線) と一致しません。ボタンの色またはスタイルを変更する方法はありますか?

4

3 に答える 3

4

ノート

最近の質問で、今回はDialogJDK8u40の初期リリースにバンドルされた新しいAPIに関して、インラインスタイルとルックアップの代わりにスタイルシートを使用して、ハックが少なく、よりクリーンなソリューションを提供しました。

openjfx-dialogsしたがって、公式リリース8u20、8u25、および8u31のダイアログを表示する方法と同様に、この質問を更新しています。

新しいソリューション

DialogPane独自の css ファイルを使用してダイアログのデフォルト スタイルをカスタマイズするには、ダイアログが実際には新しいシーンを持つ新しいステージであり、ルート ノードがインスタンスであることを考慮する必要があります。

ダイアログインスタンスを取得したら、次のようにします。

@Override
public void start(Stage primaryStage) {        
    Alert alert = new Alert(AlertType.CONFIRMATION);
    alert.setTitle("Confirmation Dialog");
    alert.setHeaderText("This is a Custom Confirmation Dialog");
    alert.setContentText("We override the style classes of the dialog");
    ...
}

そのダイアログ ペインにアクセスして、独自のスタイル シートを追加できます。

DialogPane dialogPane = alert.getDialogPane();
dialogPane.getStylesheets().add(
   getClass().getResource("myDialogs.css").toExternalForm());

ルールを定義するには、すでに使用されている記述子を知る必要があります。そのためには、 (パッケージ com.sun.javafx.scene.control.skin.modena の下で)dialog.css内のファイルを探すか、リポジトリのソース コードに移動する必要があります。openjfx-dialogs.jar

ここでdialogalertクラス セレクターのデフォルトのルールをオーバーライドするカスタム ルールを提供する必要があります。次のルールは、最初の回答のインライン スタイリングとまったく同じ効果があります。

.dialog > .dialog-pane {
    -fx-background-color: greenyellow;
}

.dialog > .dialog-pane > .button-bar {
    -fx-font-size: 24px;
    -fx-background-color: indianred;
    -fx-font-family: "Andalus";
}

.dialog > .dialog-pane > .content.label {
    -fx-font-size: 16px;
    -fx-font-weight: bold; 
    -fx-fill: blue;
}

.dialog:header > .dialog-pane .header-panel {
    -fx-background-color: cadetblue;
    -fx-font-style: italic;
}

.alert.confirmation.dialog-pane {
    -fx-graphic: url("lock24.png");
}
于 2015-02-13T19:43:59.373 に答える
2

Another solution:

dialog.getDialogPane().getScene().getStylesheets().add("css_name.css");

https://bitbucket.org/controlsfx/openjfx-dialogs/src/7273358fd294d486b4959f0c89b24b76c49bec89/src/main/resources/com/sun/javafx/scene/control/skin/modena/dialog.css?at=default

于 2015-02-13T06:16:05.243 に答える