【问题标题】:JAVAFX: Prevent user from opening new window untill he closes the first oneJAVAFX:阻止用户打开新窗口,直到他关闭第一个窗口
【发布时间】:2019-01-16 20:49:21
【问题描述】:

我有两个单独的控制器和 FXML 文件。在您控制主窗口的第一个控制器中,您可以在此处按下按钮并打开一个新窗口。

我想阻止用户打开任意数量的窗口。他应该只能打开一扇窗户并再次关闭它,然后才能打开下一扇窗户。

我说的是当你按下按钮时执行的代码。它完美地打开了我的窗口,但我仍然可以在后台打开更多窗口,这不是我想要的。

希望你能给我一些帮助。提前致谢

   @FXML
   private void addSongsToSelectedPlaylist() throws IOException {


    if (tempPlaylistName!="Library"){

        // WILL LOAD THE STAGE OF THE POPUP WINDOW AND PROVIDE THE CONSTRUCTOR THE PLAYLIST NAME
      //  AddSongController addSongController = new AddSongController();

     //   addSongController.enterSelectionMode(tempPlaylistName);


        try {
            FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("addSongToPlaylistPopUp.fxml"));
            Parent root1 = (Parent) fxmlLoader.load();
            Stage stage = new Stage();
            stage.initModality(Modality.WINDOW_MODAL);
            stage.getIcons().add(new Image("sample/images/Music-icon.png"));
            stage.setResizable(false);
            stage.setAlwaysOnTop(true);

            stage.setTitle("Add songs to your playlist");
            stage.setScene(new Scene(root1));
            stage.showAndWait();

        } catch (IOException e){

            System.out.println(e.getCause());

        }

【问题讨论】:

  • 您需要对某个共享状态(可能是Window 本身)的引用来检查另一个窗口是否isShowing。如果是,请不要显示新的。只要showing 属性为true(例如使用绑定),您甚至可以禁用该按钮。
  • 另外,关于if (tempPlaylistName != "Library"),请参阅How do I compare strings in Java?
  • 您也可以在新打开的窗口的初始化程序中关闭第一个窗口。您所需要的只是左开窗口的参考。为了方便用户,您可能需要建立某种 exitAndClose() 方法,该方法会询问并保存,以防该窗口中有什么有用的东西。
  • JavaFX Stage Modality的可能重复

标签: java javafx controller fxml multiple-instances


【解决方案1】:

您可以将模式设置为APPLICATION_MODAL,以防止应用程序在第一个窗口关闭之前打开任何新窗口:

   stage.initModality(Modality.APPLICATION_MODAL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    相关资源
    最近更新 更多