2013-10-29 14 views
5

ho bisogno di mostrare un Panel con un opzioni extra nella stessa Scene quando clicco sul Button, ma non ho idea di come ottenere questo comportamento. Il problema che il Stage non viene ridimensionato quando aggiungo il pannello a root VBox.JavaFX: AutoResize palco dopo l'aggiunta di figlio a genitore radice

Ho scritto codice semplice per dimostrare il problema.

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 
    public static void main(String[] args) { 
     launch(args); 
    } 

    public void start(Stage stage) throws Exception { 
     final VBox root = new VBox(); 
     Button button = new Button("add label"); 
     root.getChildren().add(button); 

     button.setOnAction(new EventHandler<ActionEvent>() { 
      public void handle(ActionEvent event) { 
       root.getChildren().add(new Label("hello")); 
      } 
     }); 

     stage.setScene(new Scene(root)); 
     stage.show(); 
    } 
} 

suppongo ho bisogno di chiamare un metodo per notificare contenitore principale per fare il layout, ma tutti i metodi cerco di non aver portato a me risultati desiderati.

risposta

24

programma funziona

Il programma funziona quasi come ci si aspetta Penso che (quando si fa clic sul pulsante "add etichetta", una nuova etichetta viene aggiunto alla scena).

perché non si può vederlo lavorare

Non è possibile vedere l'etichetta appena aggiunto come un palcoscenico è dimensionato per impostazione predefinita per adattare il contenuto iniziale della scena. Quando aggiungi più spazio alla scena, lo stage non verrà ridimensionato automaticamente per comprendere la nuova area.

Cosa fare per vedere il lavoro

ridimensionare manualmente la finestra palco dopo l'aggiunta di un'etichetta.

O

impostare una dimensione iniziale per la scena in modo da poter vedere le etichette appena aggiunti.

stage.setScene(new Scene(root, 200, 300)); 

O

Dopo aver aggiunto ogni nuova etichetta, size the stage to the scene.

stage.sizeToScene(); 
0

basta modificare il codice

button.setOnAction(new EventHandler<ActionEvent>() 
{ 
    public void handle(ActionEvent event) 
    { 
     root.getChildren().add(new Label("hello")); 
     stage.sizeToScene(); 
    } 
}); 
Problemi correlati