0

我用于跟踪用户活动状态的变量有问题。在 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 的方法开始时,“完成”的值 = FALSE。显示和等待的 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?我怎样才能解决这个问题?

4

1 回答 1

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);
}
于 2013-06-04T16:47:51.857 回答