Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数据从一个场景传递到另一个场景不是';不行吗?(与我对所有其他人的做法相同)_Java_Javafx_Fxml - Fatal编程技术网

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);           
    }     
}