如何修改其他控制器类的数据?

时间:2014-11-22 01:22:48

标签: javafx-8

我有一个主类(Main.java),两个FXML文件(FXML1.fxml,FXML2.fxml)和相应的控制器(FXML1Controller.java,FXML2Controller.java)。

在FXML1.fxml中我有两个文本字段和两个按钮。 在关联的控制器(FXML1Controller.java)中,我声明了文本字段和按钮,如下所示:

public TextField textField1;
public TextField textField2;

public Button buttonchange;
public Button buttonOpenWindow;

public void open ()
{
...
     stage.show ();

}
public void change ()
{
    textField2.setText (textField1.getText ());
}

我在textField1中键入文本。当我单击buttonChange时,应该在textfield2中设置文本。作品。很简单。 当我单击buttonOpen时,将打开一个新窗口。 在那里,我只有一个按钮,但想要做同样的事情。 所以像这样的方式:

public void changeFromHere ()
{
      FXMLController1 c1 = new FXMLController1 ();
    c1.change ();
}

我也知道这里有类似的问题。 但不知怎的,它不能按我想要的方式工作。

我总是得到一个NullPointerException。当然。我知道。 所以我做了以下事情:

import java.io.IOException;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.event.ActionEvent;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
...
public class FXML2Controller implements Initializable
{

    ...



     public Button buttonChangeFromHere;


     URL location;
     FXMLLoader fxmlLoader;
     Pane root;
     FXMLController1 fc1;


     public voidChangeFromHere ()
     {
         fc1.change ();
     }
     @Override
     public void initialize (URL url, ResourceBundle rb)
     {
         try
         {
             location = getClass ().getResource ("FXML1.fxml");
             fxmlLoader = new FXMLLoader (location);
             root = (Pane) fxmlLoader.load ();
             fc1 = (FXMLController1) fxmlLoader.getController ();
         } catch (IOException ex)
         {
             Logger.getLogger (FXML2Controller.class.getName ()) .log (Level.SEVERE, null, ex);
         }
     }
...
}

现在我无法获得NullPointerException,它应该以这种方式工作。但什么都没发生!?

如果我用于测试System.out.println(fc1.textField2.getText());,那么我得到文本" Hello",我在JavaFXSceneBuilder中定义了它。 如果我删除SceneBuilder中的文本,那么我得到" null"。当然。同样,我得到" null"当我输入术语"你好"程序运行时(在textField1中)。 我还尝试在initialize方法中首先初始化文本字段。然后我也总是得到文字"你好",虽然我输入" Byebye"。

本论坛中类似问题的解决方案无法帮助我。 这就是我再次提出类似问题的原因。 这段代码也只是一个例子。我不能在这里粘贴我的整个代码。我真正想做的是: 在我的程序中,我有一个列表(listView)。 在列表中是我保存为文件的文件的路径。工作正常(在主控制器,Main.fxml)。在那里,我有一个方法public void save()。现在我想从另一个控制器类调用save()方法。但几乎所有变量都是" null"。 但是他们不能" null&#34 ;,因为listView向我显示了这些信息。 我不认为getter和setter方法是合适的,因为它将是非常冗余的代码。我不想要那个。 如果有人可以回答如何使用示例中的文本字段来解决问题,那么我将不胜感激。 如果它不适用于文本字段,它也不能与其他组件一起使用:-(。 提前谢谢。

0 个答案:

没有答案