Zamykanie okna/ blokowanie okna JavaFX i SceneBuilder

0

Witam, zaczynam bawić się javaFX przy pomocy scene Buildera i szukam rozwiązania paru moich problemów.
Mając klasy

Główna main:

public class Main extends Application{

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

	@Override
	public void start(Stage primaryStage) throws Exception {
		FXMLLoader loader = new FXMLLoader();
		loader.setLocation(this.getClass().getResource("/fxXml/MainWindow.fxml"));
		StackPane stackPane = loader.load();
		
		MainController controller = loader.getController();
		
		Scene scene = new Scene(stackPane);
		primaryStage.setScene(scene);
		primaryStage.show();
		
	}

	
} 

Klase Kontrolera:

	@FXML
	private Button addNewMakerButton;

	@FXML
	void addNewMakerButtonAction(ActionEvent event) throws IOException {
		FXMLLoader loader = new FXMLLoader();
		loader.setLocation(this.getClass().getResource("/fxXml/addNewMakerWindow.fxml"));
		StackPane stackPane = loader.load();
		Scene scene = new Scene(stackPane);
		Stage stage = new Stage();
		stage.setScene(scene);
		stage.show();
	}
@FXML
	void initialize() {
		
	}

i teraz mam 2 pytania:

  1. Jak zrobić aby, przy zamykaniu głównego okna, wyskakiwało okno z potwierdzeniem czy aby na pewno użytkownik chce zamknąć
  2. Jak zrobić aby, przy wyskakiwaniu nowego okna, blokowało się okno główne(Aby nikt nie mógł tam na nic kliknąć
0

Co do pierwszego:
Zainstalować eventListener na OnCloseRequest za pomocą: https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Window.html#setOnCloseRequest-javafx.event.EventHandler-
a w kodzie eventListenera wyświetlić odpowiedni alert:
https://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Alert.html
Można to zrobić mniej więcej tak:

Alert alert = new Alert(AlertType.CONFIRMATION);
alert.setTitle(Messages.getString("Are you sure you want to close?"));
alert.setHeaderText("Confirm");
alert.setContentText(Messages.getString("Are you sure you want to close?"));

Optional<ButtonType> result = alert.showAndWait();
if (result.get() == ButtonType.OK){
    // close stage
}

Drugie: coś takiego to jest okno modalne, jak chcesz wyświetlić okno modale to stage musi mieć ustawione dwie rzeczy - modality i rodzica, można to zrobić tak:

Stage modalStage = new Stage();
modalStage.initModality(Modality.WINDOW_MODAL);
modalStage.initOwner(parentStage);
0

Wszystko spoko, ale mimo, że przy zamykaniu wyskakuje pytanie o to czy aby na pewno wyłączyć to jak użytkownik naciśnie "nie" to i tak program się kończy.... jak mogę to zablokować?

0
Grzesiek1995 napisał(a):

Wszystko spoko, ale mimo, że przy zamykaniu wyskakuje pytanie o to czy aby na pewno wyłączyć to jak użytkownik naciśnie "nie" to i tak program się kończy.... jak mogę to zablokować?

Znalezione:) Przydatna była funkcja consume:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1