Javafx 8 dialogue bordures supplémentaires


Problème: bordures supplémentaires dans la boîte de dialogue, que je voudrais supprimer.

Description:, j'ai créé une application simple avec un bouton qui affiche une boîte de dialogue. J'ai défini un volet d'ancrage avec un fond vert comme contenu de la boîte de dialogue. Ce volet d'ancrage contient un autre volet d'ancrage avec un fond noir et il est ancré au parent afin de remplir tout l'espace. En théorie, je ne devrais voir aucun espace vert, seulement le noir. Mais ce n'est pas le cas, ils sont comme des frontières vertes.

Pourquoi? Merci pour votre aide!

Capture d'écran du problème

package testdialog;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Dialog;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;


public class TestDialog extends Application {

    @Override
    public void start(Stage primaryStage) {
        Button btn = new Button();
        btn.setText("Show dialog");
        btn.setOnAction((ActionEvent event) -> {
            AnchorPane content = new AnchorPane();
            content.setStyle("-fx-background-color: green; -fx-border-color: red;");
            content.setPrefSize(100, 100);

            AnchorPane innerAnchorPane = new AnchorPane();
            innerAnchorPane.setStyle("-fx-background-color: black;");
            AnchorPane.setTopAnchor(innerAnchorPane, 0d);
            AnchorPane.setRightAnchor(innerAnchorPane, 0d);
            AnchorPane.setBottomAnchor(innerAnchorPane, 0d);
            AnchorPane.setLeftAnchor(innerAnchorPane, 0d);

            content.getChildren().add(innerAnchorPane);

            Dialog dlg = new Dialog();
            dlg.getDialogPane().getStyleClass().add("customDialog");
            dlg.initOwner(primaryStage);
            dlg.getDialogPane().setContent(content);
            dlg.initStyle(StageStyle.UNDECORATED);
            dlg.initModality(Modality.NONE);
            dlg.show();
        });

        StackPane root = new StackPane();
        root.setStyle("-fx-background-color: yellow;");
        root.getChildren().add(btn);

        Scene scene = new Scene(root, 300, 250);
        scene.getStylesheets().add(getClass().getResource("style.css").toExternalForm());

        primaryStage.setTitle("Hello World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

Fichier Css (style.CSS). La classe customDialog est juste pour supprimer la barre de boutons de la boîte de dialogue.

.customDialog > *.button-bar > *.container {
    -fx-pref-height: 0;
}
Author: BillCarson, 2017-04-28

1 answers

La feuille de style par défaut, modène.css a la règle suivante:

.dialog-pane > .content {
    -fx-padding: 0.833em; /* 10 */
}

Qui ajoute un remplissage de 10 pixels au contenu du volet de dialogue.

Vous pouvez remplacer cela dans votre boîte de dialogue avec

.customDialog .content {
    -fx-padding: 0 ;
}

Dans votre style.fichier css.

 4
Author: James_D, 2017-04-28 14:21:13