web-dev-qa-db-ja.com

デフォルトのJavaFXダイアログのスタイル設定

デフォルトのJavaFXダイアログのスタイルを設定する方法を探しています(javafx.scene.control.Dialog)。

DialogPaneを取得してスタイルシートを追加しようとしましたが、それはダイアログのごく一部しかカバーしていません。私は、外部cssファイルのみを使用し、コードにstyleClassesを追加せずにスタイルすることを好みます。これは乱雑に見えます(ヘッダー、コンテンツ、コンテンツ上の独自のコンテンツなど)。

私はすでにたくさんグーグルでControlsFXの例を見つけましたが、jdk8_40 JavaFXには独自のダイアログがあるので、今ではそれらを使用しています。

助言がありますか?

編集:

JoséPeredaがソリューションを投稿したので、私は独自のdialog.cssを作成しました。ここに投稿するのは、ダイアログ全体をカバーしており、誰かがそれをコピー&ペーストしたいからです。注.dialog-paneはすでに指定されたstyleClass名であるため、独自の名前を適用する必要はありません。もちろん、Josésはより詳細です。

.dialog-pane {
    -fx-background-color: black;
}

.dialog-pane .label {
    -fx-text-fill: white;
}

.dialog-pane:header .header-panel {
    -fx-background-color: black;
}

.dialog-pane:header .header-panel .label {
    -fx-font-style: italic;
    -fx-font-size: 2em;
}
29
xoned

独自のcssファイルを使用してダイアログのスタイルを設定できますが、そのためには、ダイアログが実際には新しいシーンと新しいステージであり、ルートノードがDialogPaneインスタンスであることを考慮する必要があります。

したがって、ダイアログインスタンスを作成したら:

@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());
dialogPane.getStyleClass().add("myDialog");

トリックは、デフォルトでDialogスタイルシートが実装しているすべてのルールを知ることです。

そして、それは難しい作業です...彼らはmodena.cssファイル、すべての通常のコントロールについて。それどころか、それらはmodena.bssファイル、プライベートパッケージの下のjfxrt.jarにあるバイナリファイル。

掘り下げた後、これらのルールを取得できたので、カスタムmyDialogs.cssファイルは次のようになります。

.myDialog{
    -fx-background-color: #f9d900;
}
.myDialog > *.button-bar > *.container{
    -fx-background-color: #a9e200;
}
.myDialog > *.label.content{
    -fx-font-size: 14px;
    -fx-font-weight: bold;
}
.myDialog:header *.header-panel{
    -fx-background-color: #a59c31;
}
.myDialog:header *.header-panel *.label{
    -fx-font-size: 18px;
    -fx-font-style: italic;
    -fx-fill: #292929;
}

そして、スタイル設定されたダイアログが表示されます:

Styled dialog

プライベートパッケージのbssファイルであることに注意してください。これらのセレクタは、将来のリリースで予告なく変更される可能性があります。

[〜#〜] edit [〜#〜]

.dialog-paneセレクターはすでに modena.css の最後の8u40 初期バージョン の一部であるため、ダイアログペインに適用されるすべてのセレクターとルールをそこに見つけることができます。

49
José Pereda