2012-03-25 24 views
17

Wykonuję aplikację JavaFX destop. Chcę usunąć domyślną ramkę okna, a także chcę dostosować 3 standardowe ikony minimalizacji, maksymalizacji i zamknięcia.JavaFX primaryStage usunąć okna granic?

Oryginalny motywacja tego rodzaju wygląd lub personalizacji jest nowy interfejs użytkownika Kaspersky 2012 .... Chcę zaprojektować coś takiego ... :)

+1

Jak nielogiczne jest oznaczanie pytania jako duplikatu, gdy faktycznie było to oryginalne pytanie. – Haggra

+0

Jeśli projektujesz własne okno, zachowaj ostrożność i staraj się trzymać nieco projektu każdej natywnej platformy. Bardzo łatwo jest to zepsuć i sprawić, że będzie wyglądać jak tani chwyt. – RecursiveExceptionException

Odpowiedz

29

Ten przykład może być dobrym punktem wyjścia. Wszystkie dekoracje okienne są usuwane. Klasa rozszerzająca HBox może być używana do umieszczania niestandardowych przycisków dla standardowych operacji okna.

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(); 
    } 
} 

Można również pobrać JavaFX Samples, gdzie można znaleźć wiele innych przydatnych przykładów.

+0

Dzięki za powyższy przykład .. – dhroove

+1

Świetna odpowiedź. +1! Ale co, jeśli ktoś chciałby nadal poruszać oknem wokół ekranu? – 735Tesla

+2

Nieważne znalazłem tę odpowiedź tutaj: http://stackoverflow.com/questions/11780115/moving-an-undecorated-stage-in-javafx-2 – 735Tesla