在我的第一个场景中,用户从表中选择一个团队,下一个是关于该团队的信息。然而,我的问题是将字符串(存储为标签)传递到显示所选团队结果的下一个场景。
public void goResults(ActionEvent event) throws IOException{
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("TeamResults.fxml"));
Parent tableViewParent = (Parent)loader.load();
Scene tableViewScene = new Scene(tableViewParent);
//access controller and call method
TeamResultsController controller = loader.getController();
controller.initData(teamLabel.getText());
这是我在选择结果按钮时将团队名称(teamLabel)从场景2传递到场景3。
private String team;
public void initData(String teamName) {
this.team = teamName;
这是将标签值传递给的函数,并将其设置为字符串团队。
但是,如果我尝试在此函数之外打印团队变量,则将其设置为null。如何让它保持initData之外的值?
例如:
public void initialize(URL url, ResourceBundle rb) {
try {
Connection con = DBConnector.connect();
ResultSet rs = con.createStatement().executeQuery("SELECT DISTINCT t1.title AS title, t2.title AS title2, g.score1, g.score2 FROM games g INNER JOIN teams AS t1 ON g.team1_id = t1.id INNER JOIN teams AS t2 ON g.team2_id = t2.id WHERE g.team1_id ="+team +"OR g.team2_id ="+team+"");
while(rs.next()){
reslist.add(new TeamResultsTable(rs.getString("title"), rs.getString("title2"), rs.getInt("score1"), rs.getInt("score2")));
}
} catch (SQLException ex) {
Logger.getLogger(TableController.class.getName()).log(Level.SEVERE, null, ex);
}
title.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, String>("title"));
title2.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, String>("title2"));
score1.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, Integer>("score1"));
score2.setCellValueFactory(new PropertyValueFactory<TeamResultsTable, Integer>("score2"));
gameTable.setItems(reslist);
我正试图将它传递给这个查询(现在不要担心准备好的语句)。
你会推荐什么方法?据我所知,这与其他示例线程类似,但我还没有将它与我的相关联。我为自己缺乏经验而道歉,但某种框架会令人难以置信。
但是,任何帮助都很棒,谢谢。
你不能使用initialize
的值,因为initialize
在loader.load()
调用,而在这个时候这确实是null
值。你可以在调用controller.initData(teamLabel.getText());
之后,在新函数中调用(并调用该函数)甚至在initData
中进行查询
另一个不推荐的选项是将控制器作为对象传递给加载器(并在加载之前放入所有需要的值),但如果这样做,则在fxml文件中定义控制器时将会遇到问题