2012-04-03 16 views
12

Come è possibile visualizzare una nuova finestra in JavaFX 2.0? Ad esempio, dopo l'azione del pulsante clic. Voglio che entrambe le finestre (la finestra principale e la nuova finestra) comunichino tra loro.Sottofinestra JavaFX 2.0

Thx per assistenza.

+2

Penso che ci sia un esempio in Ensemble. – assylias

risposta

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

Comunicare tra due finestre è simile come per ogni coppia di oggetti in Java.

+7

Thx. Funziona con una piccola modifica ;-) 'Stage stage = new Stage(); stage.setScene (nuova scena (nuovo gruppo (nuovo testo (10,10, "la mia seconda finestra"))))); stage.show(); ' – fxuser

+0

right, my bad :) –

13

È possibile creare nuove finestre chiamando new Stage() e mostrarle tramite stage.show().

Ecco un esempio di creazione di un nuovo stage con un controllo casella di controllo che modifica il testo di un'etichetta visualizzata in un altro stage.

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

Cosa fare se si desidera che entrambe le finestre chiudano e terminino l'applicazione quando l'utente chiude uno di essi? – SasQ

+0

@SasQ si prega di fare nuove domande come nuove domande. – jewelsea

+0

questa domanda era una risposta alla domanda originale, quindi l'ho posta qui. Se hai intenzione di essere così utile, non ho comunque bisogno del tuo aiuto. L'ho già capito da solo. – SasQ

0

All'interno del pulsante di azione click è possibile creare un nuovo Satgé e poi un oggetto dell'altra classe che si desidera visualizzare. dopodiché chiama il metodo start usando l'oggetto creato.

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

spero che funzioni!

Problemi correlati