2013-05-31 169 views
0

我遇到了一个用于跟踪用户活动状态的变量的问题。在GUI中,我有一个按钮,点击按钮后会启动第二个GUI。在该GUI中,用户可以完成在第一个GUI中启动的活动或不完成。showandwait更改变量值

如果用户取消第二个GUI,那么这个想法是返回到第一个GUI,将所有变量和列表保留其当前值。如果第二个GUI完成第一个GUI的活动,则应重置所有变量和列表。

要跟踪这个,我有一个变量(布尔完成)最初设置为FALSE。在第二个GUI中,当单击“OK”按钮(而不是“Cancel”按钮)时,第二个GUI会在第一个GUI中调用一个方法,将“complete”的值更改为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。该值在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成功改变“complete”的值,但是当我返回到第一个GUI时,它仍然会看到完整的为FALSE?我该如何解决这个问题?

回答

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); 
} 
+0

谢谢,但我已经试过了。由于某种原因,虽然从第二个GUI调用的方法(在第一个GUI中)将完成成功更改的值报告为TRUE,但当第二个GUI关闭并且第一个GUI恢复调用第二个GUI的方法时,值为再次报告为FALSE。这是我不明白的。 – John

+0

当你调用该方法时,你是否真的在第一个控制器中设置了实例变量? – Yarrgh