簡體   English   中英

將數據從一個場景傳遞到另一個場景不起作用? (以與其他所有人相同的方式進行)

[英]Passing data from one scene to another isn't working? (doing it the same way i have for all others)

基本上,我試圖輸入2個日期,這些日期將傳遞給另一個控制器中的2個不同的字符串,以便它更改條形圖中的文本,從而運行報表。

選擇2個日期時的代碼:

 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)

 public String date1 = "";
    public String date2 = "";
    public String totalDate = "";
    public int amount;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {


        totalDate = date1+" - "+date2;        
        System.out.println(totalDate);
        System.out.println(""+amount);

        XYChart.Series set1 = new XYChart.Series<>();

        set1.getData().add(new 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>

在執行FXMLLoader.load()的過程中會調用控制器中的initialize()方法,這當然是在控制器中設置值之前。 您需要在控制器上調用更新數據的方法。 (這是為什么您永遠不要使用公共字段的一個很好的示例-它允許更改這些字段而無需控制可能依賴於其他字段的其他字段(在本例中為條形圖)發生的情況。)

你需要類似的東西

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

    // ...
}

然后在按鈕處理程序中,您只需要

date1 = datePickerFrom.getEditor().getText();
date2 = datePickerTo.getEditor().getText();
assignedController.setDates(date1, date2, count);

順便說一句,您應該為此考慮在SQL中使用count函數,並且應該關閉不再使用的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);           
    }     
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM