2012-04-03 94 views
12

如何在JavaFX 2.0中显示新窗口?例如在按钮点击操作之后。 我希望这两个窗口(主窗口和新窗口)相互通信。JavaFX 2.0子窗口

Thx寻求帮助。

+2

我认为在Ensemble中有一个例子。 – assylias 2012-04-03 17:01:09

回答

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

两个窗口之间的通信类似于Java中的任何两个对象。

+7

Thx。它适用于一个小的修改;-)'Stage stage = new Stage(); (新的组(新的文本(10,10,“我的第二个窗口”)))); stage.show();' – fxuser 2012-04-03 17:20:42

+0

right,my bad :) – 2012-04-03 17:26:45

13

通过调用new Stage()来创建新窗口,并通过stage.show()显示它们。

以下是使用复选框控件创建新舞台的示例,该复选框控件可修改显示在不同舞台中的标签的文本。

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

如果我希望两个窗口在用户关闭其中一个时关闭并终止应用程序,该怎么办? – SasQ 2016-04-13 09:09:44

+0

@SasQ请将新问题作为新问题提出。 – jewelsea 2016-04-13 16:35:37

+0

这个问题跟随原始问题,因此我在这里提出。如果你打算有所帮助,那么我不需要你的帮助。我已经知道了自己。 – SasQ 2016-04-14 15:09:34

0

里面的按钮点击动作,你可以创建一个新的舞台,然后你要显示的其他类的对象。之后使用创建的对象调用start方法。

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

希望这会起作用!