2012-03-25 72 views
17

Estoy haciendo la aplicación Javatop destop. Quiero eliminar el borde predeterminado de Windows y también quiero personalizar los 3 iconos estándar de minimizar, maximizar y cerrar.JavaFX primaryStage eliminar los bordes de Windows?

La motivación original de este tipo de apariencia o la personalización es la nueva interfaz de usuario de Kaspersky 2012 .... Quiero diseñar algo así ... :)

+1

Qué ilógico es marcar una pregunta como duplicada cuando en realidad era la pregunta original. – Haggra

+0

Si diseña su propia ventana, sea muy conservador y trate de apegarse al diseño de cada plataforma nativa. Es increíblemente fácil arruinarlo y hacer que se vea como un truco barato. – RecursiveExceptionException

Respuesta

29

Este ejemplo podría ser un buen punto de partida. Toda la decoración de la ventana se elimina. Una clase que se extiende HBox se puede utilizar para colocar botones personalizados para operaciones de ventana estándar.

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

También puede descargar el JavaFX Samples, donde puedes encontrar muchos más ejemplos útiles.

+0

Gracias por el ejemplo anterior. – dhroove

+1

Gran respuesta. +1! Pero, ¿y si uno quisiera poder mover la ventana alrededor de la pantalla? – 735Tesla

+2

No importa, encontré esa respuesta aquí: http://stackoverflow.com/questions/11780115/moving-an-undecorated-stage-in-javafx-2 – 735Tesla

Cuestiones relacionadas