2011-12-29 16 views
7

Estoy intentando crear una etapa personalizada en javafx 2.0. Quiero que mi etapa cae sombra en la pantalla como caído por otras ventanas ... Probé con el código siguiente:creando una etapa no decorada en javafx 2.0

public class ChatWindow { 
final private Stage stage = new Stage(StageStyle.UNDECORATED); 
private Scene scene; 
private Group rg; 
private Text t = new Text(); 
private double initx = 0, inity = 0; 

public ChatWindow() { 

    rg = new Group(); 
    scene = new Scene(rg, 320, 240); 
    //scene.setFill(null); 
    scene.setFill(new Color(0, 0, 0, 0)); 
    stage.setScene(scene); 
    stage.show(); 
    setupStage(); 
} 

private void setupStage() { 
    Rectangle r = new Rectangle(5, 5, stage.getWidth() - 10, stage.getHeight() - 10); 
    r.setFill(Color.STEELBLUE); 
    r.setEffect(new DropShadow()); 
    rg.setOnMousePressed(new EventHandler<MouseEvent>() { 
     public void handle(MouseEvent me) { 
      initx = me.getScreenX() - stage.getX();// - me.getSceneX(); 
      inity = me.getScreenY() - stage.getY(); 
     } 
    }); 
    rg.setOnMouseDragged(new EventHandler<MouseEvent>() { 

     public void handle(MouseEvent me) { 
      stage.setX(me.getScreenX() - initx); 
      stage.setY(me.getScreenY() - inity); 
     } 
    }); 
    rg.getChildren().add(r); 
    rg.getChildren().add(t); 
} 

public void setVisible() { 
    stage.show(); 
} 
} 

puedo ver la caída de sombra, pero en realidad su es un fondo blanco sobre el que su caída. lo tanto, es inútil, ya que en la pantalla de color del defecto será visible, hará que se vea fea ..

Esta es la captura de pantalla en la pantalla blanca: enter image description here

Y esto en la pantalla de color: enter image description here

¿Cómo resolver este problema? Por favor ayuda.

Respuesta

10

Debe establecer el estilo StageStyle.TRANSPARENT, véase el siguiente código:

public class ChatWindow extends Application { 

    @Override 
    public void start(final Stage stage) throws Exception { 
     stage.initStyle(StageStyle.TRANSPARENT); // here it is 

     Group rg = new Group(); 
     Scene scene = new Scene(rg, 320, 240, Color.TRANSPARENT); 
     stage.setScene(scene); 
     stage.show(); 

     Rectangle r = new Rectangle(5, 5, stage.getWidth() - 10, stage.getHeight() - 10); 
     r.setFill(Color.STEELBLUE); 
     r.setEffect(new DropShadow()); 
     rg.getChildren().add(r); 
    } 

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