2017-07-25 46 views
1

我的Java项目中有几个场景,以及我真的不知道如何解决的一个问题。 First scene called "Zadanie".在第一个场景中有一个名为“Zadanie”的TextFields和ComboBoxes。因此,正如您在图片中看到的,我在TextFields中编写了一些数字,并在ComboBoxes中选择了一些选项。然后我点击“Vypočítať”(按钮)开启其他场景。然后我切换回第一个场景“Zadanie”,但TextFields和ComboBoxes中的所有内容都消失了。 Back on first scene "Zadanie".请给我一些代码示例或如何将这些代码保留在第一个场景中。谢谢。Java - 场景生成器 - 在切换场景后,TextField和ComboBox中的用户输入消失

+0

你能请张贴一些代码,重现该问题? 请参阅https://stackoverflow.com/help/how-to-ask –

回答

0

问题是,当您切换屏幕时,表示屏幕的对象将被丢弃。因此,诸如用户输入的任何变量也被处理掉。当您切换回屏幕时,它是一个不同的对象,但属于同一类型。这意味着诸如用户输入之类的变量的值被新鲜地实例化或初始化。

解决方案: 为了存储这些信息,创建一些全局变量(例如,Main中的变量,但应该使用编程实践中不同的类)。当用户点击切换屏幕,但在屏幕实际切换(卸载)之前,将所有用户输入存储在全局变量中。然后当屏幕切换回时,将这些变量重新加载到全局变量的字段中。

Global.java

class Global { 
    public static String nameFieldValue; 
    public static String ageFieldValue; 
} 

PersonForm.java

class PersonForm extends BorderPane { 
    Button closeButton; 
    TextField nameField; 
    TextField ageField; 

    public PersonForm() { 
     this.nameField = new TextField(...); 
     this.ageField = new TextField(...); 
     this.closeButton = new Button("Close Window"); 

     // set layouts of buttons here. 

     if (Global.nameFieldValue != null) { 
      this.nameField.setText(Global.nameFieldValue); 
     } 
     if (Global.passwordFieldValue != null) { 
      this.passwordField.setText(Global.passwordFieldValue); 
     } 

     PersonForm thisForm = this; // So that EventHandler cna use this. 
     this.closeButton.setOnAction(new EventHandler<MouseEvent>() { 
      @Override 
      public void handle(MouseEvent event) { 
       Global.nameFieldValue = thisForm.nameField.getText(); 
       Global.passwordFieldValue = thisForm.passwordField.getText(); 
       // switch screens. 
      } 
     }); 
    } 
} 
+0

感谢您的帮助,但您能否给我一些用代码编写的例子?这将有所帮助。 –

+0

我真的很感激你也帮助过我的代码,但我以其他方式做了。从我的第二个屏幕我做了弹出式屏幕。这意味着当你点击按钮时,第二个屏幕将打开,但第一个屏幕不会关闭。由于我自己的教育,我下次肯定会使用你的代码。谢谢伊恩柯克帕特里克。 –

+0

没问题!乐意效劳! –