import javafx.application.Application; import javafx.beans.Observable; import javafx.event.ActionEvent; import javafx.stage.Stage; import javafx.stage.StageStyle; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.layout.BorderPane; public class StageClose extends Application { @Override public void start(Stage primaryStage) { try { BorderPane root = new BorderPane(); Button b = new Button("Open"); b.setOnAction((e) -> open(primaryStage)); root.setCenter(b); Scene scene = new Scene(root,400,400); primaryStage.setScene(scene); primaryStage.setTitle("primary stage"); primaryStage.show(); } catch(Exception e) { e.printStackTrace(); } } private void open(Stage primaryStage) { Stage utility = new Stage(StageStyle.UNDECORATED); BorderPane p = new BorderPane(new Button("Hello Util")); utility.setScene(new Scene(p,300,200)); utility.show(); utility.requestFocus(); utility.focusedProperty().addListener(o -> { if(!utility.isFocused()) { System.err.println("utility.close"); utility.close(); } }); } public static void main(String[] args) { launch(args); } }