0

How do I refresh personTableView in ListPersonController when I add a new person in AddPersonController?

ListPersonController.java

public class ListPersonController {
    @FXML
    public TableView<Person> personTableView;
    @FXML
    private TableColumn<Person, String> name;
    @FXML
    private TableColumn<Person, String> gender;
    @FXML

    public void initialize() throws SQLException, ClassNotFoundException {
        name.setCellValueFactory(new PropertyValueFactory<>("name"));
        gender.setCellValueFactory(new PropertyValueFactory<>("gender"));
    }

    private List<Person> getAllPerson() throws ClassNotFoundException, SQLException {
        Connection conn = DriverManager.getConnection("jdbc:sqlite:src/main/resources/person.db");
        List<Person> personList = new ArrayList<>();
        ResultSet rs;
        try {
            Class.forName("org.sqlite.JDBC");
            Statement stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT id, name, gender FROM person");
            while (rs.next()) {
                String name = rs.getString("name");
                String gender = rs.getString("gender");
                personList.add(new Person(name, gender));
            }
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return personList;
    }
}

AddPersonController.java

public class AddPersonController {        
    @FXML
    protected void handleSaveButtonAction(ActionEvent event) throws SQLException, ClassNotFoundException {
        String fName = "John";
        String fGender = "female"
        Person person = new Person(
           fName,
           fGender,
        );
        save(person);
    }    

    private void insertIntoPersonTable(Person person) throws ClassNotFoundException, SQLException {
        Class.forName("org.sqlite.JDBC");
        Connection conn = DriverManager.getConnection("jdbc:sqlite:src/main/resources/person.db");
        PreparedStatement prep = conn.prepareStatement("INSERT INTO person VALUES (?, ?);");
        prep.setString(2, person.getName());
        prep.setString(3, person.getCommonName());
        prep.addBatch();
        conn.setAutoCommit(false);
        prep.executeBatch();
        conn.setAutoCommit(true);
    }
}
methuselah
  • 12,766
  • 47
  • 165
  • 315
  • 1
    register your own handler in AddPersonController and use it to notify ListPersonController for the event. for me, full reloading is superfluous. just add the new entry. – mr mcwolf May 13 '18 at 06:59
  • 3
    Store the data in seperate part of the application (model) and [pass it to both controllers.](https://stackoverflow.com/questions/14187963/passing-parameters-javafx-fxml) In this case you probably don't need anything complex. A `ObservableList` is probably sufficient. – fabian May 13 '18 at 07:40

0 Answers0