无法在 JavaFX 控制器之间传递数据
Cant pass data between JavaFX controllers
我正在尝试在不同 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;
}
}
我在这一行得到 NullPointerException:
devamController.as("aaaaaaaaaaaaaaaaaaaaa");
我已经试过了,但没有用:
控制器是从 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()
已经执行。
我正在尝试在不同 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;
}
}
我在这一行得到 NullPointerException:
devamController.as("aaaaaaaaaaaaaaaaaaaaa");
我已经试过了,但没有用:
控制器是从 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()
已经执行。