デフォルトの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;
}
独自の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;
}
そして、スタイル設定されたダイアログが表示されます:
プライベートパッケージのbssファイルであることに注意してください。これらのセレクタは、将来のリリースで予告なく変更される可能性があります。
[〜#〜] edit [〜#〜]
.dialog-pane
セレクターはすでに modena.css の最後の8u40 初期バージョン の一部であるため、ダイアログペインに適用されるすべてのセレクターとルールをそこに見つけることができます。