1

I'm attempting to launch an Edit Customer Window with text fields filled with reference from the rows of a table. The Table and Dialog both have different controller classes.

Here's the code snippet from the table in question that gives us the required customerID when a user double clicks on a row.

Table Controller: CustomersController:

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        populateCustomerTable();
        tableListeners(null);
    }

    void tableListeners(CustomerData customerData){
        tblcustomer.setRowFactory(tr -> {
            TableRow<CustomerData> row = new TableRow<>();
            row.setOnMouseClicked(event -> {
                if (event.getClickCount() == 2 && (!row.isEmpty())) {
                    int selectedCustomerID = row.getItem().getCustomerID();
                    System.out.println("A certain row: " + selectedCustomerID + " has been clicked!");

                    Stage stage = new Stage();
                    FXMLLoader loader = new FXMLLoader();
                    try {

                        Parent root = loader.load(getClass().getResource("../view/popups/edit_customer.fxml"));
                        stage.setScene(new Scene(root));
                        stage.setTitle("Editing Existing Customer's Details");
                        stage.initModality(Modality.APPLICATION_MODAL);
                        stage.initOwner(btnEditCustomer.getScene().getWindow());
                        stage.showAndWait();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
            });
            return row;
        });
    }

I want selectedCustomerID from the above piece of code to be parsed into the EditCustomerController class hence when the dialog launches, it's text fields should be prepoulated with values suppled from the select query that queries the database with the where condition being tht selectedCustomerID from the CustomersController class.

Code snippet from EditCustomerController class:

@Override
    public void initialize(URL location, ResourceBundle resources) {

        //populateEditCustomerFields(1);
    }

    void populateEditCustomerFields(int customerID){
        this.customer_ID=customerID;
        System.out.println(customer_ID);
        try {
            con = DatabaseConnection.getConnected();
            stmt = con.createStatement();
            rs = con.createStatement().executeQuery("SELECT * FROM `h_customers` WHERE `customerID`=" + customer_ID);

            while (rs.next()) {
                title.setText(rs.getString("title"));
                firstName.setText(rs.getString("firstName"));
                lastName.setText(rs.getString("lastName"));
                nationalID.setText(String.valueOf(rs.getInt("nationalID")));
                //dob.setText(rs.getString("DOB"));
                mobilePhone.setText(rs.getString("mobilePhone"));
                workPhone.setText(rs.getString("workPhone"));
                email.setText(rs.getString("email"));
            }
        } catch (SQLException ex) {
            Logger.getLogger(NewRoomController.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

The Idea here is to parse selectedCustomerID from CustomersController into the initialize method of EditCustomerController so the Dialog can launch with the customer details that require editing. I've searched for solutions all over the web and here on StackOverflow, some come close to answering me, some are too complex for my newbie mind, but none has helped. Any solution would be highly appreciated. I will provide any further clarification required.

MusH
  • 75
  • 1
  • 9
  • @Uluk Biy: how do I pass the Selected Customer ID from the CustomersController class to the EditCustomerController class? – MusH May 23 '15 at 09:38

1 Answers1

0

You can get the controller class and invoke its necessary methods. See this answer for getting controller, then do

editCustomerController.populateEditCustomerFields(selectedCustomerID);

on table row double click.

Further to improve performance, you can load the edit_customer.fxml only once and when the user double clicks, refresh its rendered data with editCustomerController.populateEditCustomerFields(selectedCustomerID).

Community
  • 1
  • 1
Uluk Biy
  • 46,036
  • 11
  • 134
  • 150