2012-01-09 12 views
5

Ho cercato di impostare la larghezza e l'altezza della scena all'esterno del costruttore ed è stato inutilmente. Dopo aver guardato attraverso l'API Scene ho visto un metodo che consente di ottenere rispettivamente l'altezza e la larghezza ma non uno per impostare il metodo ..: s (difetto di progettazione forse).Imposta la larghezza e l'altezza della scena

Dopo ulteriori ricerche mi sono imbattuto nel SceneBuilder e ho trovato metodi che potevano modificare l'altezza e la larghezza. Tuttavia, non so come applicarlo a un oggetto scena già creato o come creare un oggetto SceneBuilder che potrebbe essere utilizzato al posto dell'oggetto scena.

risposta

8

Dopo aver creato Scene e assegnato allo Stage, è possibile utilizzare Stage.setWidth e Stage.setHeight per modificare contemporaneamente le dimensioni di scena e di scena.

SceneBuilder non può essere applicato a un oggetto già creato, può essere utilizzato solo per la creazione della scena.

+0

Ok, Grazie. Questa è una strada che non ho pensato di usare o non sapevo di poter usare. Grazie mille, lo proverò e ti farò sapere come è andata. – Chika

+0

Grazie mille per quello. Funziona il tuo suggerimento era perfetto, tuttavia una domanda in più. Dovrei essere in grado di cancellare una scena o una scena, giusto? Come posso farlo accadere? – Chika

+1

allo stage "clear" assegna ad esso una scena vuota: 'stage.setScene (new Scene());'. Per cancellare la scena, imposta una radice vuota: 'scene.setRoot (new Group());' oppure rimuovi tutti i figli di root: 'scene.getRoot(). GetChildren(). Clear();' –

2

Volevo solo pubblicare un'altra risposta per coloro che potrebbero avere avuto un problema simile al mio.

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

Non c'è setWidth() o setHeight(), e la proprietà è ReadOnly, ma se si guarda al

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. 

Come potete vedere, questo è dove è possibile impostare l'altezza e la larghezza, se devi.

Per me, sto usando SceneBuilder, proprio come hai descritto che stavi facendo, e avevo bisogno della larghezza e dell'altezza di quello. Sto creando controlli personalizzati, quindi era strano che non lo facesse automaticamente, quindi questo è come farlo se necessario.

Avrei potuto usare setWidth()/setHeight() dal Stage pure.

0

Non sembra possibile impostare la dimensione dello Scene dopo la sua creazione.

Impostare la dimensione di Stage significa impostare la dimensione della finestra, che include la dimensione della decorazione. Quindi lo Scene è di dimensioni più ridotte, a meno che lo Stage non sia decorato.

La mia soluzione è quella di calcolare la dimensione della decorazione, mentre inizializzazione e aggiungerlo alla dimensione della Stage durante il ridimensionamento:

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); 
} 
Problemi correlati