web-dev-qa-db-fra.com

JavaFX primaryStage supprime les bordures de fenêtres?

Je fais une application de destop JavaFX. Je veux supprimer la bordure de fenêtre par défaut et je souhaite également personnaliser les 3 icônes standard de minimiser, maximiser et fermer.

La motivation originale de ce type d'apparence ou de personnalisation est la nouvelle interface utilisateur de Kaspersky 2012 .... Je veux concevoir quelque chose comme ça ... :)

22
DHRUV BANSAL

Cet exemple pourrait être un bon point de départ. Toute décoration de fenêtre est supprimée. Une classe étendant HBox peut être utilisée pour placer des boutons personnalisés pour les opérations de fenêtre standard.

package javafxdemo;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ToolBar;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

public class JavaDemo extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    class WindowButtons extends HBox {

        public WindowButtons() {
            Button closeBtn = new Button("X");

            closeBtn.setOnAction(new EventHandler<ActionEvent>() {

                @Override
                public void handle(ActionEvent actionEvent) {
                    Platform.exit();
                }
            });

            this.getChildren().add(closeBtn);
        }
    }

    @Override
    public void start(Stage primaryStage) {
        //remove window decoration
        primaryStage.initStyle(StageStyle.UNDECORATED);

        BorderPane borderPane = new BorderPane();
        borderPane.setStyle("-fx-background-color: green;");

        ToolBar toolBar = new ToolBar();

        int height = 25;
        toolBar.setPrefHeight(height);
        toolBar.setMinHeight(height);
        toolBar.setMaxHeight(height);
        toolBar.getItems().add(new WindowButtons());

        borderPane.setTop(toolBar);

        primaryStage.setScene(new Scene(borderPane, 300, 250));
        primaryStage.show();
    }
}

Vous pouvez également télécharger les JavaFX Samples où vous pouvez trouver de nombreux autres exemples utiles.

37
pmoule