我遇到的问题是我用来跟踪用户活动的状态。在GUI中,我有一个按钮,在单击按钮时会启动第二个GUI。在该GUI中,用户可以完成在第一个GUI中启动的活动。
如果用户取消第二个GUI,那么我们的想法是返回第一个GUI,将所有变量和列表保留为当前值。如果第二个GUI完成第一个GUI的活动,则应重置所有变量和列表。
为了跟踪这个,我有一个变量(布尔完整)最初设置为FALSE。在第二个GUI中,当单击“确定”按钮(而不是“取消”按钮)时,第二个GUI调用第一个GUI中的方法,将“完成”的值更改为TRUE。
要了解到底发生了什么,我在几个点上都有System.out.println,这样我就可以看到“完整”的价值。我看到的是:
Launching first GUI - complete = FALSE
Launching second GUI - complete = FALSE
Clicking "OK" in second GUI - complete = TRUE
Second GUI closes itself, returning to complete first GUI activity
First GUI finishes activity with complete = FALSE
我假设这是因为我正在使用showandwait启动第二个GUI,并且当包含showandwait的方法开始时,“complete”的值= FALSE。值显示在show和wait的WAIT部分,然后方法继续,这是我得到的值仍为FALSE,尽管它已更改为TRUE。
以下是相关代码的摘要(如果您需要确切的代码,它会更长,但我可以根据要求发布):
completeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
try {
System.out.println("b4 calc = " + complete); // complete = FALSE
// all the code to create the calcStage
calcStage.showAndWait(); // second GUI, which calls a method in THIS
// class that changes complete to TRUE. That method
// (in THIS file) also has a println that shows the change.
getComplete(); // tried adding this method to check the value of
// "complete" after the change made by the calcStage
// (which calls a method in this same file)
System.out.println("Complete? " + complete);
// this shows complete = FALSE,
// though in the calcStage it was changed to TRUE
if (salecomplete) {
// code that should reset all variables and lists if the activity was completed
}
}
}
}
这里的问题是为什么第二个GUI成功地改变了“完成”的值,但是当我返回到第一个GUI时它仍然看到完全为FALSE?我怎么能解决这个问题?
答案 0 :(得分:0)
尝试让第二个GUI的控制器调用第一个GUI控制器中的方法来修改该完整变量
例如:
// Code to handle the OK button being pressed
@Override
public void handle(ActionEvent t) {
// Do validation and work
//reference to the first controller object
firstController.setComplete(true);
}