2016-04-05 7 views
1

私はポップアップとして機能するステージを持っています。ユーザーがそのステージの外側をクリックするとステージを閉じる方法、それを達成する方法、ポップアップとして機能するステージ用のコード以下のとおりである。ステージ外のマウスイベントを検出して閉じる方法

Stage stage = new Stage(); 
    Parent root = FXMLLoader.load(getClass().getResource("colorchange.fxml")); 
    Scene sce = new Scene(root,400,400); 
    stage.initModality(Modality.APPLICATION_MODAL); 
    stage.initOwner(color.getScene().getWindow()); 
    stage.setScene(sce); 
    stage.showAndWait(); 

答えて

1

stage.focusedProperty()でリスナーを登録し、集中プロパティが変更された場合falsestage.hide()を呼び出します。

SSCCE:

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.layout.StackPane; 
import javafx.stage.Modality; 
import javafx.stage.Stage; 

public class CloseWindowOnClickOutside extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button showPopup = new Button("Show popup"); 
     showPopup.setOnAction(e -> { 
      Stage popup = new Stage(); 
      Scene scene = new Scene(new Label("Popup"), 120, 40); 
      popup.setScene(scene); 
      popup.initModality(Modality.APPLICATION_MODAL); 
      popup.initOwner(primaryStage); 
      popup.focusedProperty().addListener((obs, wasFocused, isNowFocused) -> { 
       if (! isNowFocused) { 
        popup.hide(); 
       } 
      }); 
      popup.show(); 
     }); 

     StackPane root = new StackPane(showPopup); 
     Scene scene = new Scene(root, 350, 120); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    public static void main(String[] args) { 
     launch(args); 
    } 
} 
+0

それは若干の修正後に働いたが、私はわからないが、それは働いていたことを確認し、感謝:) – Ajay

+0

してくださいかかわらず「popup.initModality(Modality.APPLICATION_MODAL)」が、問題だったと思います私のために良い...あなたが何を指しているのかわからない。 –

+0

申し訳ありませんが、私の 'stage.showAndWait();'ステートメントがありました。 – Ajay

関連する問題