从控制器A到控制器B的空数据传递变量

时间:2019-10-17 22:58:41

标签: javafx

你好,我正在尝试将数据库中的变量数据从一个控制器传递到另一个控制器,但是我有一个问题,当我将数据传递到控制器A到控制器B时,出现一个Null值,场景之间的层次结构是这样:

LoginController->AdminController->UserController

在LoginController中访问AdminController并传递值,我这样做:

    public String getRoladmin() {
    return roladmin;
}


    public void setRoladmin(String roladmin) {
    this.roladmin = roladmin;
}


   public String roladmin="";

我在代码的这一部分捕获变量roladmin,如下所示:

 while(rs.next()) {

                 comparauser=rs.getString("NOMBREUSUARIO");
                 comparapass=rs.getString("PASS");
                 miadmin=rs.getString("NOMBRE_ADMIN");
                 roladmin=rs.getString("ROL_ADMIN");


             }

要进入阶段,我将验证用户和通行证是否正确,如下所示:

 ----rest of code---   if(comparauser.equals(fusuario.getText().toString())&&comparapass.equals(fcontrasena.getText().toString().trim())) {

                     try {
                            Stage administrador=new Stage();
                            FXMLLoader carga = new FXMLLoader(getClass().getResource("Admin.fxml"));
                            Parent StackPane = (Parent)carga.load();
                            Scene scene = new Scene(StackPane);

                            AdminScreenController loadl = carga.<AdminScreenController>getController();
                            /*loadl.UserScreen.setText("Bienvenido"+"  "+fusuario.getText().toString());*/
                            loadl.UserScreen.setText("Bienvenido"+"  "+miadmin);
                            /* String r=loadl.UserScreen.getText().toString();*/





      -----in this part I call the LoginController and pass the variable Roladmin------



----begin of call--
                                String h=LoginController.this.roladmin;
                                LoginController.this.setRoladmin(h);
                                String r=LoginController.this.getRoladmin();
                                loadl.setCapdata(r);



    -----end of call-----

                                if(!r.equals("ADMINISTRADOR")) {

                                        loadl.btnimg5.setDisable(true);
                                        loadl.btnimg5.setStyle("-fx-opacity:0.65;");

                                    }
                                else {
                                    loadl.btnimg5.setDisable(false);
                                }

                                scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
                                administrador.setScene(scene);
                                administrador.setTitle("AdminScreen");
                                Stage login=(Stage)fusuario.getScene().getWindow();
                                login.hide();
                                administrador.show();
                         }catch(Exception e) {
                             Logger.getLogger(Application.class.getName()).log(Level.SEVERE, null, e);
                         }
                     }
    ---rest of code---  

现在我像这样将变量传递给AdminController

in AdminController i have this:

public String capdata;
    public String h;

    public String getCapdata() {
        return capdata;
    }

    public String setCapdata(String data) {
        return this.capdata = data;
    }


this is the code i have to load UserController Stage:


    public void UserView() throws IOException {
        Stage userstage = new Stage();
        FXMLLoader cargauser =new FXMLLoader(getClass().getResource("UsuarioScreen.fxml"));
        Parent StackPane = (Parent)cargauser.load();
        UserController cargatodouser = cargauser.<UserController>getController();
        String pasadato=UserScreen.getText().toString();
        cargatodouser.iduser.setText(pasadato);

  ---begin of call to pass the variable---          

h=AdminScreenController.this.getCapdata();

---end of call---   



        /*String r=cargatodouser.iduser.getText().toString();*/
        Scene scene = new Scene(StackPane);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        userstage.setScene(scene);
        userstage.setTitle("QuoraApp");
        Stage AdminScreen=(Stage)btnimg1.getScene().getWindow();
        AdminScreen.hide();
        userstage.show();
}

现在,当我将变量传递给UserController类时,我具有一个空值:

In UserController class i have this to go back AdminController:




public String capturau;



public String getCapturau() {
    return capturau;
}

public String setCapturau(String capturau) {
    return this.capturau = capturau;
}

        public void inicio() throws IOException {

                            Stage administrador=new Stage();
                            FXMLLoader carga = new FXMLLoader(getClass().getResource("Admin.fxml"));
                            Parent StackPane =(Parent) carga.load();

                            AdminScreenController loadl = carga.<AdminScreenController>getController();
                            String pasadato=iduser.getText().toString();
                            loadl.UserScreen.setText(pasadato);

                            /*Captura.setText(loadl.getCapdata());
                            String captura=Captura.getText().toString();
                            System.out.println(captura);*/


                           UserController.this.setCapturau(loadl.getCapdata());
                           String gg=UserController.this.getCapturau();
                           System.out.println(gg);

        }

我做错了什么?请在这里一点帮助。

1 个答案:

答案 0 :(得分:1)

您需要研究静态变量的概念
这是我在一个Controller上声明并使用另一个Controller的静态变量
关于使用静态变量或全局变量的大警告
不论您放置在静态变量中的是什么,它都会保留该值,直到您清除或更改它为止。

static Integer strID;

这里是在另一个Controller类中使用静态变量strID的情况
请注意,它需要导入到新的Controller

    import static diary.ChildTableViewController.strID;

private void ReadDetailView() throws SQLException{

    stmnt = conn.createStatement();
    ///String sql = "SELECT * FROM Child WHERE CID = "+strID;
    ///ResultSet rs = stmnt.executeQuery(sql);
    ResultSet rs = stmnt.executeQuery("SELECT * FROM Child WHERE CID = "+strID);

欢迎来到