2012-01-09 22 views
5

He estado tratando de establecer el ancho y alto de la escena fuera del constructor y ha sido en vano. Después de mirar a través de la API Scene vi un método que le permite obtener la altura y el ancho respectivamente, pero no uno para establecer el método ...: s (falla de diseño tal vez).Establecer ancho y alto de escena

Después de más investigaciones encontré el SceneBuilder y encontré métodos que podrían modificar el alto y el ancho. Sin embargo, no sé cómo aplicarlo a un objeto de escena ya creado o cómo crear un objeto SceneBuilder que podría usarse en lugar del objeto de escena.

Respuesta

8

Una vez que creó Scene y le asignó a la Stage puede utilizar Stage.setWidth y Stage.setHeight cambiar tanto el escenario y la escena de los tamaños al mismo tiempo.

SceneBuilder no se puede aplicar a un objeto ya creado, solo se puede utilizar para la creación de escena.

+0

Bien, gracias. Esa es una avenida que no he pensado usar o no sabía que podría usar. Muchas gracias, lo intentaré y les contaré cómo fue. – Chika

+0

Muchas gracias por eso. Funciona su sugerencia fue perfecta, sin embargo, una pregunta más. Debería poder limpiar una escena o escenario ¿no? ¿Cómo puedo hacer que esto suceda? – Chika

+1

para "borrar" etapa asignarle una escena vacía: 'stage.setScene (new Scene());'. Para borrar la escena, establezca una raíz vacía: 'scene.setRoot (new Group());' o elimine todos los hijos de root: 'scene.getRoot(). GetChildren(). Clear();' –

2

Solo quería publicar otra respuesta para aquellos que podrían haber tenido un problema similar al mío.

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/Scene.html

No hay setWidth() o setHeight(), y la propiedad es ReadOnly, pero si nos fijamos en

Constructors 

Scene(Parent root) 
Creates a Scene for a specific root Node. 

Scene(Parent root, double width, double height) 
Creates a Scene for a specific root Node with a specific size. 

Scene(Parent root, double width, double height, boolean depthBuffer) 
Constructs a scene consisting of a root, with a dimension of width and height, and specifies whether a depth buffer is created for this scene. 

Scene(Parent root, double width, double height, boolean depthBuffer, SceneAntialiasing antiAliasing) 
Constructs a scene consisting of a root, with a dimension of width and height, specifies whether a depth buffer is created for this scene and specifies whether scene anti-aliasing is requested. 

Scene(Parent root, double width, double height, Paint fill) 
Creates a Scene for a specific root Node with a specific size and fill. 

Scene(Parent root, Paint fill) 
Creates a Scene for a specific root Node with a fill. 

Como se puede ver, este es donde se puede ajustar la altura y la anchura si necesitas.

Para mí, estoy usando SceneBuilder, tal como lo describió que estaba haciendo, y necesitaba el ancho y alto de eso. Estoy creando controles personalizados, por lo que era extraño que no lo hiciera automáticamente, así que esta es la forma de hacerlo si es necesario.

Pude haber usado setWidth()/setHeight() desde Stage también.

0

Parece que no es posible establecer el tamaño de Scene después de haber sido creado.

Configurar el tamaño de Stage significa establecer el tamaño de la ventana, que incluye el tamaño de la decoración. Por lo tanto, el Scene es de menor tamaño, a menos que Stage no esté decorado.

Mi solución es calcular el tamaño de la decoración, mientras que la inicialización y añadirlo al tamaño de la Stage al cambiar el tamaño:

private Stage stage; 
private double decorationWidth; 
private double decorationHeight; 

public void start(Stage stage) throws Exception { 
    this.stage = stage; 

    final double initialSceneWidth = 720; 
    final double initialSceneHeight = 640; 
    final Parent root = createRoot(); 
    final Scene scene = new Scene(root, initialSceneWidth, initialSceneHeight); 

    this.stage.setScene(scene); 
    this.stage.show(); 

    this.decorationWidth = initialSceneWidth - scene.getWidth(); 
    this.decorationHeight = initialSceneHeight - scene.getHeight(); 
} 

public void resizeScene(double width, double height) { 
    this.stage.setWidth(width + this.decorationWidth); 
    this.stage.setHeight(height + this.decorationHeight); 
} 
Cuestiones relacionadas