2012-04-03 17 views
12

¿Cómo puedo visualizar una nueva ventana en JavaFX 2.0? Por ejemplo, después de presionar el botón de acción. Quiero que ambas ventanas (la ventana principal y la nueva ventana) se comuniquen entre sí.Subventana JavaFX 2.0

Thx para obtener ayuda.

+2

Creo que hay un ejemplo en Ensemble. – assylias

Respuesta

17
new Stage(new Scene(new Group(new Text(10,10, "my second window")))).show(); 

La comunicación entre dos ventanas es similar a la de dos objetos en Java.

+7

Thx. Funciona con una pequeña modificación ;-) 'Stage stage = new Stage(); stage.setScene (escena nueva (nuevo grupo (nuevo texto (10,10, "mi segunda ventana")))); stage.show(); ' – fxuser

+0

right, my bad :) –

13

Crea ventanas nuevas llamando al new Stage() y muéstrelas por stage.show().

Aquí hay un ejemplo de creación de una nueva etapa con un control de casilla de verificación que modifica el texto de una etiqueta que se muestra en una etapa diferente.

import javafx.application.Application; 
import javafx.beans.value.*; 
import javafx.event.EventHandler; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.layout.StackPane; 
import javafx.stage.*; 

public class SecondStage extends Application { 
    public static void main(String[] args) { launch(args); } 
    @Override public void start(Stage primaryStage) { 
    // setup some dymamic data to display. 
    final String STANDARD_TEXT = "Every Good Boy Deserves Fruit"; 
    final String ALTERNATE_TEXT = "Good Boys Deserve Fruit Always";   
    final Label label = new Label(STANDARD_TEXT); 

    // configure the primary stage. 
    StackPane primaryLayout = new StackPane(); 
    primaryLayout.getChildren().add(label); 
    primaryLayout.setStyle("-fx-background-color: lightgreen; -fx-padding: 10;"); 
    primaryStage.setScene(new Scene(primaryLayout, 200, 100)); 
    primaryStage.setTitle("Primary Stage"); 

    // configure the secondary stage. 
    final Stage secondaryStage = new Stage(StageStyle.UTILITY); 
    CheckBox alternateTextCheck = new CheckBox("Show alternate text"); 
    alternateTextCheck.selectedProperty().addListener(new ChangeListener<Boolean>() { 
     @Override public void changed(ObservableValue<? extends Boolean> selected, Boolean oldValue, Boolean newValue) { 
     if (newValue) label.setText(ALTERNATE_TEXT); else label.setText(STANDARD_TEXT); 
     } 
    }); 
    StackPane secondaryLayout = new StackPane(); 
    secondaryLayout.getChildren().add(alternateTextCheck); 
    secondaryLayout.setStyle("-fx-background-color: cornsilk; -fx-padding: 10;"); 
    secondaryStage.setScene(new Scene(secondaryLayout, 200, 100)); 
    secondaryStage.setTitle("Secondary Stage"); 

    // specify stage locations. 
    secondaryStage.setX(400); secondaryStage.setY(200); 
    primaryStage.setX(400); primaryStage.setY(350); 

    // add a trigger to hide the secondary stage when the primary stage is hidden. 
    // this will cause all stages to be hidden (which will cause the app to terminate). 
    primaryStage.setOnHidden(new EventHandler<WindowEvent>() { 
     @Override public void handle(WindowEvent onClosing) { 
     secondaryStage.hide(); 
     } 
    }); 

    // show both stages. 
    primaryStage.show(); 
    secondaryStage.show(); 
    } 
} 
+0

¿Qué sucede si quiero que ambas ventanas se cierren y finalice la aplicación cuando el usuario cierra cualquiera de ellas? – SasQ

+0

@SasQ por favor haga nuevas preguntas como nuevas preguntas. – jewelsea

+0

esta pregunta fue un 'seguimiento_ a la pregunta original, por lo tanto, la pregunté aquí. Si vas a ser útil, entonces no necesito tu ayuda de todos modos. Ya lo descubrí por mi cuenta. – SasQ

0

Dentro del botón de acción de clic se puede crear una nueva satge y luego un objeto de la otra clase que desea visualizar. después de eso, llame al método de inicio utilizando el objeto creado.

 Stage stage= new Stage(); 
     NewClass nc= new NewClass(); 
     nc.start(stage); 

espero que esto funcione !!!

Cuestiones relacionadas