隐藏和显示的JavaFX阶段问题

时间:2017-01-19 18:19:47

标签: java javafx javafx-8 fxml

我正在构建一个应用程序,该应用程序显示一个窗口,询问用户是否要使用两个按钮选项暂停计算机,其中一个是YES,PC暂停。

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

“后来的按钮”的代码

public Image byteArrayToImage(byte[] byteArrayIn)
{
    MemoryStream ms = new MemoryStream(byteArrayIn);
    Image returnImage = Image.FromStream(ms);
    return returnImage;
}

private ArrayList GetImagesFromDB(string code)
{
    ArrayList images = new ArrayList();

    SqlCommand selectImagesCommand = new SqlCommand("SELECT * FROM images WHERE code = '"+code+"'");
    selectImagesCommand.Connection = myConnection;

    if(myConnection.State == ConnectionState.Closed){      
        myConnection.Open();
    }

    SqlDataReader imagesReader = selectImagesCommand.ExecuteReader();

    while (imagesReader.Read())
    {
        byte[] newimagebytesRecord = (byte[])imagesReader["image"];
        images.Add(byteArrayToImage(newimagebytesRecord));
    }

    return images;
}

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

 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();
            }

        });  

我知道Platform.exit();杀死程序,但当我只使用.hide();没有发生任何事情,窗口永远不会关闭,最糟糕的是,当我使用Platform.exit()命令时,我不能让框架再次出现......

任何人都知道一种方式可能更容易隐藏并在一定时间后显示窗口?也许我这样做错了。

的问候。

1 个答案:

答案 0 :(得分:2)

您的问题代码中发生了什么并不是很清楚。底线是你永远不应该自己创建tvTitle = (TextView) findViewById(R.id.title); 的实例;唯一的Application实例应该是为您创建的实例。

我实际上并不需要为您已经展示的功能设置单独的课程(当然,您可以这样做)。如果按下否按钮,您只需隐藏Application,然后在一小时内再次打开它:

classStage

请注意,默认情况下,如果最后一个窗口关闭,FX应用程序将退出。因此,您应该使用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(); } Platform.setImplicitExit(false);方法拨打init()

我假设您正在重新加载FXML文件,因为UI可能已经更改,因为它之前已加载。显然,如果情况并非如此,你所要做的就是再次展示舞台:

start()