JavaFX既存のウインドウから子ウインドウを開く
JavaFXでアプリケーションウインドウを開き、そこから子ウインドウを開くサンプルプログラムです。
メインのウインドウから設定メニューのウインドウを開きたい時などに使います。
親ウィンドウはApplication、子ウィンドウはStageをextendsする
JavaFX楽天 アプリケーションを開くClassはApplicationをextendsして作りますが、そこから呼び出されるウインドウは、StageをextendsしたClassになります。
サンプルプログラムの内容
親ウインドウにはボタンを配置しておき、ボタン楽天 が押されたら子ウインドウを開くようにしています。
子ウインドウには親のStageを渡しています。
子ウインドウの方は受け取ったStageから、親ウインドウを位置を得て、親よりX,Y,ともに30づつずれた位置でウインドウを開く設定にしています。
親ウインドウのプログラム
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.*;
import javafx.stage.Stage;
/**
* 子Stageを開く試験
* @author tomo
*/
public class NewStageTest1 extends Application {
Stage stage;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage sstage) throws Exception {
stage = sstage;
FlowPane pane = new FlowPane();
Scene scene = new Scene(pane, 280, 200);
Button b1 = new Button("子ステージ開く");
//マウスがクリックされたときのイベント
EventHandler<MouseEvent> mouseClick = ( event ) -> this.mouseClick( event );
b1.addEventHandler( MouseEvent.MOUSE_CLICKED , mouseClick );
pane.getChildren().add( b1 );
stage.setScene(scene);
stage.show();
}
private void mouseClick( MouseEvent e ){
NewStageTest2 nst2 = new NewStageTest2( stage );
}
}
子ウインドウのプログラム
package tomojavalib.fx;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
/**
* 子Stage
* @author tomo
*/
public class NewStageTest2 extends Stage {
public NewStageTest2( Stage oya ){
super();
FlowPane pane = new FlowPane();
Button b1 = new Button("子ステージ");
pane.getChildren().add( b1 );
Scene scene = new Scene(pane, 260, 150);
this.setX( oya.getX() + 30);
this.setY( oya.getY() + 30);
this.setScene(scene);
this.show();
}
}
最終更新日: 2019-06-03 07:37:53