当前位置: 首页 > 知识库问答 >
问题:

JavaFX舞台问题与隐藏和显示

汪信鸥
2023-03-14

我正在构建一个应用程序,它会显示一个窗口,询问用户是否要使用两个按钮选项暂停计算机,其中一个是“是”,电脑将暂停。

另一个名为“稍后”的按钮应该隐藏窗口,一个小时后它再次出现,并提出相同的问题。

“后来的巴特顿”的代码

 noButton.setOnAction(event -> {


        Done=false; //boolean to close and open the frame
        Gui gui = new Gui();

            try {
                gui.start(classStage);
            } catch (Exception e) {
                e.printStackTrace();
            }

        });  

你在代码中看到的布尔是bc,这是我认为我可以控制的方式,相信我,我尝试了不同的方式,但没有人只是帮我解决这个问题,这是GUI类的代码

public class Gui extends Application {

public  Stage classStage = new Stage();

public static boolean Done=true;

public static boolean flag=true;


public Gui() {


}

@Override
public void start(Stage primaryStage) throws Exception {

    Done = Controller.isDone();
    classStage = primaryStage;


    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    primaryStage.setX(primaryScreenBounds.getMaxX() - primaryScreenBounds.getWidth());
    primaryStage.setY(primaryScreenBounds.getMaxY() - primaryScreenBounds.getHeight());
    primaryStage.setAlwaysOnTop(true);
    Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
    primaryStage.setTitle("Alerta suspencion de equipo");
    primaryStage.setScene(new Scene(root));
    primaryStage.setResizable(false);
    primaryStage.initStyle(StageStyle.UNDECORATED);

    if (Controller.isDone() == true) {
        primaryStage.show();

    } else if(Controller.isDone() == false) {
        primaryStage.hide();
         Platform.exit(); // this is the only way that the windows close 


    }
}

我知道那个平台。退出();终止程序,但当我只使用。隐藏();在舞台上什么都没发生,窗户从来没有关过,最糟糕的是当我使用平台时。exit()命令我无法使帧再次出现。。。

有人知道一种在特定时间后更容易隐藏和显示窗口的方法吗?也许我做错了。

当做

共有1个答案

邬安邦
2023-03-14

你的问题中的代码中到底发生了什么并不清楚。底线是,你不应该自己创建应用程序的实例;唯一的应用程序实例应该是为您创建的实例。

实际上,我并不认为有必要为您展示的功能创建一个单独的类(当然,您可以这样做)。如果按下“否”按钮,只需隐藏classStage,然后在一小时后再次打开:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> showUI(classStage));
    oneHourPause.play();
}); 

// ...

private void showUI(Stage stage) {

    Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
    stage.setX(primaryScreenBounds.getMaxX() - primaryScreenBounds.getWidth());
    stage.setY(primaryScreenBounds.getMaxY() - primaryScreenBounds.getHeight());
    stage.setAlwaysOnTop(true);
    Parent root = FXMLLoader.load(getClass().getResource("MainWindow.fxml"));
    stage.setTitle("Alerta suspencion de equipo");
    stage.setScene(new Scene(root));
    stage.setResizable(false);
    stage.initStyle(StageStyle.UNDECORATED);
    stage.show();
}

请注意,默认情况下,如果最后一个窗口关闭,FX应用程序将退出。所以你应该调用平台。setImplicitExit(false) init()start()方法中。

我假设您正在重新加载FXML文件,因为用户界面自上次加载以来可能发生了更改。显然,如果不是这样的话,你所要做的就是重新展示舞台:

noButton.setOnAction(event -> {


    Done=false; //boolean to close and open the frame

    classStage.hide();
    PauseTransition oneHourPause = new PauseTransition(Duration.hours(1));
    oneHourPause.setOnFinished(e -> classStage.show());
    oneHourPause.play();
}); 

 类似资料:
  • 默认情况下,当所有窗口在JavaFX中关闭时,应用程序终止。然而,我使用了,让应用程序保留。现在,当应用程序被激活时,我将如何显示该应用程序?当应用程序从Mac Dock Bar激活时,是否有任何事件监听器可供我收听? 或者,当单击系统关闭按钮时,是否有要侦听的事件,以便我可以隐藏stage应用程序将在激活时显示?

  • 假设我在JavaFX中有一个舞台。我没有按X关闭按钮来关闭窗口,而是隐藏窗口,或者说切换到计算机上的其他应用程序。无论何时我隐藏窗口或切换到PC的任何其他窗口,我都希望舞台自动关闭。 我尝试了这三种方法,但所有这些方法仅在我自己关闭窗口时激活,而不是在我隐藏窗口时激活。 任何帮助将不胜感激。谢谢。

  • 我一直试图从控制器打开一个新窗口以显示进度条: 请帮忙。没有例外,也没有错误。谢谢 编辑:我已经找到了它不显示的原因,这是因为在后面的代码中我有一个函数:阻止程序刷新我的场景和显示元素。是否有一种方法可以在后台或另一个线程中运行这一行(我以前从未使用过线程)再次感谢你的帮助。

  • 我对may e(fx)clipse应用程序有问题。我想在应用程序启动时显示一个启动屏幕。我成功地创建了实现StartupProgressTrackerService的类,并调用了我的stateReach方法。然而,我对javafx本身有问题。我想用StageStyle创建Stage。未装饰。然而,当我调用stage时。show()方法阶段不会立即渲染,并在创建主窗口后立即显示。它可以很好地工作,例

  • 我需要帮助使用JavaFX编写基于windows的应用程序。我只是想用if/else条件显示或隐藏一些图像。我真正想要的是这样的:如果x=1,那么显示image1如果x=2,则显示image2 我尝试了setvisible()和setDisable()方法来做到这一点,但是不起作用。 我的.fxml文件代码是:

  • 问题内容: 我需要创建一个向用户显示主要阶段的应用程序,并且如果用户关闭该阶段,而不是完成该应用程序,则应该隐藏该阶段以备后用。在摇摆中,我们可以仅将setVisible(false)调用到JFrame或JDialog,但是如何在JavaFX上执行呢? 问题答案: JavaFX工具包启动后,默认情况下,当最后一个可见窗口关闭时,它将关闭。 为防止这种情况,您可以致电 尽管可以从任何线程调用它,但是