2012-03-25 10 views
17

Sto realizzando un'applicazione destop JavaFX. Voglio rimuovere il bordo predefinito di Windows e inoltre voglio personalizzare le 3 icone standard di minimizzare, ingrandire e chiudere.JavaFX primaryStage rimuove i bordi di Windows?

La motivazione originale di questo tipo di sguardi o personalizzazione è nuova interfaccia utente di Kaspersky 2012 .... voglio progettare qualcosa di simile ... :)

+1

Quanto è illogico contrassegnare una domanda come duplicata quando in realtà era la domanda originale. – Haggra

+0

Se si progetta la propria finestra, si prega di essere molto prudenti e cercare di attenersi al design di ciascuna piattaforma nativa. È incredibilmente facile rovinarlo e farlo sembrare un espediente economico. – RecursiveExceptionException

risposta

29

Questo esempio potrebbe essere un buon punto di partenza. Tutta la decorazione della finestra è stata rimossa. Una classe che estende HBox può essere utilizzata per posizionare pulsanti personalizzati per le operazioni della finestra 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(); 
    } 
} 

È anche possibile scaricare il JavaFX Samples dove si possono trovare esempi molti altri utili.

+0

Grazie per l'esempio sopra .. – dhroove

+1

Ottima risposta. +1! Ma cosa succederebbe se si volesse ancora spostare la finestra sullo schermo? – 735Tesla

+2

Non importa, ho trovato questa risposta qui: http://stackoverflow.com/questions/11780115/moving-an-undecorated-stage-in-javafx-2 – 735Tesla