2012-04-03 4 views
12

JavaFX 2.0で新しいウィンドウを表示するにはどうすればよいですか?たとえば、ボタンをクリックした後のアクション。 私は、両方のウィンドウ(メインウィンドウと新しいウィンドウ)が互いに通信するようにします。JavaFX 2.0サブウィンドウ

Thxヘルプ。

+2

私はEnsembleに例があると思います。 – assylias

答えて

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

2つのウィンドウ間の通信は、Javaの2つのオブジェクトと同様です。

+7

Thx。それは小さな変更;-) 'ステージステージ=新しいステージ(); stage.setScene(新しいシーン(新しいグループ(新しいテキスト(10,10、 "私の2番目のウィンドウ")))); stage.show(); ' – fxuser

+0

右、私の悪い:) –

13

new Stage()を呼び出して新しいウィンドウを作成し、stage.show()で表示します。

これは、異なるステージに表示されるラベルのテキストを変更するチェックボックスコントロールを使用して新しいステージを作成する例です。新しいsatgeしてから表示したい他のクラスのオブジェクトを作成することができ、ボタンのクリックアクションインサイド

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

+0

@ SasQ新しい質問として新しい質問をしてください。 – jewelsea

+0

この質問は最初の質問に続きましたので、私はここでそれを尋ねました。あなたが役に立ったら、とにかくあなたの助けは必要ありません。私はすでにそれを自分で分かった。 – SasQ

0

。その後、作成されたオブジェクトを使用してstartメソッドを呼び出します。

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

これがうまくいきます!

関連する問題