java控制器删除数据_如何修改其他控制器类的数据?

我有一个主类(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” . 当然 . 同样,当我在程序运行时输入术语“Hello”(在textField1中)时,我得到“null” . 我还尝试在initialize方法中首先初始化文本字段 . 然后我也总是得到文本“你好”,虽然我输入了“Byebye” .

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值