Les boîtes de dialogue JavaFX par défaut

je cherche un moyen de modifier le style de la boîte de dialogue JavaFX par défaut (javafx.scene.control.Dialog).

j'ai essayé d'obtenir la boîte de dialogue et d'ajouter une feuille de style, mais elle ne couvre qu'une petite partie de la boîte de dialogue. Je préférerais n'utiliser qu'un fichier CSS externe et sans ajouter de classe de style au-dessus du code. Cela aurait l'air désordonné (en-tête, contenu, propre contenu sur le contenu et plus encore..)

j'ai googlé déjà beaucoup et j'ai trouvé seulement des exemples pour ControlsFX, mais depuis Jdk8_40 JavaFX a son propre Les dialogues, je les utiliser maintenant.

des suggestions?

Edit:

<!-Depuis que José Pereda a posté la solution, j'ai créé mon propre dialogue.CSS. Je vais le poster ici parce qu'il couvre l'ensemble du dialogue et peut-être que quelqu'un veut copier&coller. Note. dialog-pane est déjà un nom de classe donné, donc vous n'avez pas besoin d'appliquer le vôtre. Bien sûr, Josés est plus détaillé fin.

.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;
}
27
demandé sur xoned 2015-02-09 21:53:16

1 réponses

vous pouvez modeler vos dialogues avec votre propre fichier css, mais pour cela vous devez prendre en considération que le dialogue est en fait une nouvelle étape, avec une nouvelle scène, et le noeud racine est un DialogPane instance.

donc une fois que vous créez une instance de dialogue:

@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");
    ...
}

vous pouvez accéder à son panneau de dialogue et ajouter votre propre feuille de style et votre propre sélecteur de classe:

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

maintenant le truc est de connaître toutes les règles a Dialog feuille de style a été mis en œuvre par défaut.

Et c'est une tâche difficile... car ils ne sont pas dans le modena.css le fichier, comme pour tous les contrôles réguliers. Au contraire, ils sont dans la modena.bss fichier, un fichier binaire situé dans le jfxrt.pot sous paquets privés.

après quelques recherches j'ai réussi à obtenir ces règles, donc votre coutume myDialogs.css le fichier devrait ressembler à quelque chose comme ceci:

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

Et vous aurez votre style dialogue:

Styled dialog

notez qu'étant un fichier bss sous paquets privés, Ces sélecteurs peuvent changer sans préavis dans les versions futures.

EDIT

je viens de trouver que le .dialog-pane le sélecteur fait déjà partie de modène.css dans la dernière 8u40 versions anciennes, de sorte que vous pouvez y trouver tous les sélecteurs et les règles appliquées au panneau de dialogue.

45
répondu José Pereda 2015-02-10 19:24:27