Java 将数据从一个场景传递到另一个场景不是';不行吗?(与我对所有其他人的做法相同)
基本上,我尝试输入两个日期,这两个日期将传递到另一个控制器中的两个不同字符串,以便它更改条形图中的文本,从而运行报告 选择两个日期时的代码:Java 将数据从一个场景传递到另一个场景不是';不行吗?(与我对所有其他人的做法相同),java,javafx,fxml,Java,Javafx,Fxml,基本上,我尝试输入两个日期,这两个日期将传递到另一个控制器中的两个不同字符串,以便它更改条形图中的文本,从而运行报告 选择两个日期时的代码: public void okayBtnPressed() throws SQLException, IOException{ con = handler.getConnection(); int count = 0; String query1 = "SELECT * FROM assigned WHE
public void okayBtnPressed() throws SQLException, IOException{
con = handler.getConnection();
int count = 0;
String query1 = "SELECT * FROM assigned WHERE Date BETWEEN ? AND ?";
pst = con.prepareStatement(query1);
pst.setString(1, datePickerFrom.getValue().toString());
pst.setString(2, datePickerTo.getValue().toString());
ResultSet rs = pst.executeQuery();
FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/bownhrmain1/reports/assignedReport.fxml"));
Parent root = myLoader.load();
AssignedReportController assignedController = myLoader.getController();
while(rs.next()){
count ++;
}
if(count == 0){
// no results
} else {
System.out.println(""+count);
System.out.println(datePickerFrom.getValue().toString());
System.out.println(datePickerTo.getValue().toString());
date1 = datePickerFrom.getEditor().getText();
date2 = datePickerTo.getEditor().getText();
assignedController.date1 = date1;
assignedController.date2 = date2;
assignedController.amount = count;
Stage window = (Stage)(okayBtn.getScene()).getWindow();
Scene scene = new Scene(root);
window.setScene(scene);
}
}
所有system.out行都打印正确的日期,在本例中,它打印正确的日期,并在1上返回行值
此报告显示在两个不同日期之间分配给员工的项目数
这是将数据应用于条形图的代码:(这是assignedController)
公共字符串date1=“”;
公共字符串date2=“”;
公共字符串totalDate=“”;
公共整数金额;
/**
*初始化控制器类。
*/
@凌驾
公共void初始化(URL、ResourceBundle rb){
totalDate=日期1+“-”+日期2;
系统输出打印项次(总日期);
系统输出打印项次(“+金额);
XYChart.Series set1=新的XYChart.Series();
set1.getData().add(新的XYChart.Data(totalDate,amount));
barChart1.getData().addAll(set1);
}
我没有得到任何错误,但是assignedController中的金额int=0,并且两个字符串都不返回任何内容
这是条形图页面的fxml:
<AnchorPane id="AnchorPane" prefHeight="473.0" prefWidth="737.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8" fx:controller="reports.AssignedReportController">
<children>
<BarChart fx:id="barChart1" layoutX="119.0" layoutY="44.0" title="Stock Assigned">
<xAxis>
<CategoryAxis fx:id="monthAxis" label="Month" side="BOTTOM" />
</xAxis>
<yAxis>
<NumberAxis fx:id="amountAxis" label="Amount Sold" side="LEFT" />
</yAxis>
</BarChart>
</children>
</AnchorPane>
控制器中的initialize()
方法是在执行fxmloader.load()
期间调用的,当然是在设置控制器中的值之前。您需要在控制器上调用更新数据的方法。(这是一个很好的例子,说明了为什么永远不应该使用公共字段-它允许更改这些字段,而不控制可能依赖它们的其他字段(在本例中为条形图)的情况。)
你需要像这样的东西
public class AssignedReportController {
@FXML
private BarChart<String, Number> barchart1 ;
private XYChart.Series<String, Number> set1 ;
public void initialize() {
set1 = new XYChart.Series<>();
barChart1.getData().add(set1);
}
public void setDates(String date1, String date2, int amount) {
String totalDate = date1 + " - " + date2 ;
set1.getData().add(new XYChart.Data<>(totalDate, amount));
}
// ...
}
作为旁白,您应该考虑在SQL中使用一个计数函数,并且应该关闭不再使用的JDBC资源:
public void okayBtnPressed() throws SQLException, IOException{
con = handler.getConnection();
String query1 = "SELECT COUNT(*) FROM assigned WHERE Date BETWEEN ? AND ?";
pst = con.prepareStatement(query1);
pst.setString(1, datePickerFrom.getValue().toString());
pst.setString(2, datePickerTo.getValue().toString());
ResultSet rs = pst.executeQuery();
int count = rs.next().getInt(1);
rs.close();
pst.close();
FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/bownhrmain1/reports/assignedReport.fxml"));
Parent root = myLoader.load();
AssignedReportController assignedController = myLoader.getController();
if(count == 0){
// no results
} else {
System.out.println(""+count);
System.out.println(datePickerFrom.getValue().toString());
System.out.println(datePickerTo.getValue().toString());
date1 = datePickerFrom.getEditor().getText();
date2 = datePickerTo.getEditor().getText();
assignedController.setDates(date1, date2, count);
Stage window = (Stage)(okayBtn.getScene()).getWindow();
Scene scene = new Scene(root);
window.setScene(scene);
}
}
date1 = datePickerFrom.getEditor().getText();
date2 = datePickerTo.getEditor().getText();
assignedController.setDates(date1, date2, count);
public void okayBtnPressed() throws SQLException, IOException{
con = handler.getConnection();
String query1 = "SELECT COUNT(*) FROM assigned WHERE Date BETWEEN ? AND ?";
pst = con.prepareStatement(query1);
pst.setString(1, datePickerFrom.getValue().toString());
pst.setString(2, datePickerTo.getValue().toString());
ResultSet rs = pst.executeQuery();
int count = rs.next().getInt(1);
rs.close();
pst.close();
FXMLLoader myLoader = new FXMLLoader(getClass().getResource("/bownhrmain1/reports/assignedReport.fxml"));
Parent root = myLoader.load();
AssignedReportController assignedController = myLoader.getController();
if(count == 0){
// no results
} else {
System.out.println(""+count);
System.out.println(datePickerFrom.getValue().toString());
System.out.println(datePickerTo.getValue().toString());
date1 = datePickerFrom.getEditor().getText();
date2 = datePickerTo.getEditor().getText();
assignedController.setDates(date1, date2, count);
Stage window = (Stage)(okayBtn.getScene()).getWindow();
Scene scene = new Scene(root);
window.setScene(scene);
}
}