当前位置: 首页 > 知识库问答 >
问题:

不能在JavaFX控制器之间传递数据

房学文
2023-03-14

我试图在不同FXML场景的控制器之间传递数据。但是我不能将数据传递给另一个控制器。这是我的第一个控制器。

public class FXMLDocumentController {

Session session;

private static Stage myStage;

@FXML
private Button button;

@FXML
private TextField txtAd;

@FXML
private TextField txtSifre;

@FXML
void handleButtonAction(ActionEvent event) {

    session = NewHibernateUtil.getSessionFactory().openSession();
    Transaction tx = null;
    try {
        tx = session.beginTransaction();

        Query query = session.createQuery("from Userss where ad = :code and sifre = :sifre");
        query.setParameter("code", txtAd.getText().trim());
        query.setParameter("sifre", txtSifre.getText().trim());
        if (query.list().size() == 1) {

            Alert alert = new Alert(AlertType.INFORMATION);
            alert.setTitle("Giriş");
            alert.setHeaderText(null);
            String s = "This is an example of JavaFX 8 Dialogs... ";
            alert.setContentText(s);
            alert.showAndWait();

        }


        tx.commit();
    } catch (Exception e) {
        if (tx != null) {
            tx.rollback();
        }
    } finally {

        try {
            session.close();

            FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDevam.fxml"));
            DevamController devamController = loader.getController();
            devamController.as("aaaaaaaaaaaaaaaaaaaaa");
            AnchorPane login = (AnchorPane) loader.load();
            Scene scene = new Scene(login);

            myStage.setTitle("asd");
            myStage.setScene(scene);

        } catch (IOException ex) {
            Logger.getLogger(FXMLDocumentController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

static void setStage(Stage stage) {
    myStage = stage;
}

}

这是第二个控制器。

 public class DevamController implements Initializable {

String as ;


@FXML
private Label lblAd;

@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO

    lblAd.setText(as);
}    

public void as (String a){
   as = a;
}

}

 devamController.as("aaaaaaaaaaaaaaaaaaaaa");

共有1个答案

东博瀚
2023-03-14

控制器是从FXML文件加载的(因为它是在FXML文件中定义的,使用fx:controller),所以在使用loader.load()加载FXML之前,它将为空。只需切换顺序:

        FXMLLoader loader = new FXMLLoader(getClass().getResource("FXMLDevam.fxml"));
        AnchorPane login = (AnchorPane) loader.load();
        DevamController devamController = loader.getController();
        devamController.as("aaaaaaaaaaaaaaaaaaaaa");

您需要更新as()方法中的标签,因为已经执行initialize()

 类似资料:
  • 问题内容: 我想单击一列并将单元格索引发送到新阶段。但是我无法将参数()传递给另一个控制器。我已经尝试了所有方法,但仍然无法正常工作。 主控制器 EditClientController 问题答案: 如果要在FXML文件中指定控制器(因此您不能使用Deepak的答案), 并且 要访问方法中的索引(因此您不能使用José的答案),则可以使用控制器工厂:

  • 问题内容: 我打算学习来自许多不同的MV *框架的AngularJS。我喜欢框架,但是在控制器之间传递数据时遇到了麻烦。 假设我有一个带有一些输入(input.html)的屏幕和一个控制器,比方说InputCtrl。 此视图上有一个按钮,可将您带到另一个屏幕,例如,使用控制器ApproveCtrl批准(approve.html)。 此ApproveCtrl需要来自InputCtrl的数据。在较大的

  • 我很难将参数从一个控制器传递到另一个控制器。 具体来说: LoginController向MainController传递。 null LoginController.java MainController.java

  • 问题内容: 我是iOS和Objective-C以及整个MVC范例的新手,我坚持以下几点: 我有一个充当数据输入表单的视图,我想给用户选择多个产品的选项。产品在另一个视图上以列出,并且我启用了多个选择。 我的问题是,如何将数据从一个视图传输到另一个视图?我将把选择保留在一个数组中,但是如何将其传递回先前的数据输入表单视图,以便在提交表单时将其与其他数据一起保存到Core Data? 我到处冲浪,看到

  • 问题内容: 我有一个基本的控制器来显示我的产品, 在我看来,我正在列表中显示此产品 我要尝试做的是,当某人单击产品名称时,我有另一个名为cart的视图,其中添加了该产品。 因此,我的疑问是,如何将这种点击产品从第一个控制器传递给第二个?我认为购物车也应该是控制器。 我使用指令处理click事件。我也觉得我应该使用服务来实现上述功能,只是想不通如何?因为购物车将是预定义的,所以添加的产品数可能是5/

  • 问题内容: 当使用AngularJS服务尝试在两个控制器之间传递数据时,我的第二个控制器在尝试从该服务访问数据时始终会收到未定义的信息。我猜这是因为第一个服务执行的是$ window.location.href,并且我认为这正在清除服务中的数据?我是否可以将URL更改为新位置,并将数据保留在第二个控制器的服务中?当我运行下面的代码时,第二个控制器中的警报始终未定义。 app.js(定义服务的位置)