diff --git a/src/main/java/table_view/Person.java b/src/main/java/table_view/Person.java index 01f9f48ed27e534829784e533a19476c76d28432..3f360d0dacbab3770f8f1cf3951f3dc67933bc17 100644 --- a/src/main/java/table_view/Person.java +++ b/src/main/java/table_view/Person.java @@ -2,7 +2,7 @@ package table_view; import javafx.beans.property.SimpleStringProperty; -class Person { +public class Person { private final Long id; private final SimpleStringProperty firstName; diff --git a/src/main/java/table_view/PersonDAO.java b/src/main/java/table_view/PersonDAO.java index 64b7167319b1ee1294c36cfda4e9f6cfacb08516..6dda4ec5788cd08d5407e2071acff30d73e2f841 100644 --- a/src/main/java/table_view/PersonDAO.java +++ b/src/main/java/table_view/PersonDAO.java @@ -12,6 +12,12 @@ import java.util.LinkedList; class PersonDAO implements AutoCloseable{ private static final String INSERT_SQL = "INSERT INTO person(first_name, last_name, email) values (?,?,?)"; + + private static final String SELECT_SQL = "SELECT id, first_name, last_name, email FROM person"; + + private static final String UPDATE_SQL = "UPDATE person set first_name = ?, last_name = ?, email = ? WHERE id = ?"; + + private static final String DELETE_SQL = "DELETE FROM person WHERE id = ?"; private Connection conn; @@ -61,7 +67,7 @@ class PersonDAO implements AutoCloseable{ checkConnection(); Collection<Person> result = new LinkedList<>(); try (Statement stm = conn.createStatement()){ - stm.execute("SELECT id, first_name, last_name, email FROM person"); + stm.execute(SELECT_SQL); ResultSet resultSet = stm.getResultSet(); while(resultSet.next()) { result.add(new Person(resultSet.getLong(1), resultSet.getString(2), resultSet.getString(3),resultSet.getString(4))); @@ -75,7 +81,7 @@ class PersonDAO implements AutoCloseable{ public boolean updatePerson(Person p) { checkConnection(); - try (PreparedStatement ps = conn.prepareStatement("UPDATE person set first_name = ?, last_name = ?, email = ? WHERE id = ?")){ + try (PreparedStatement ps = conn.prepareStatement(UPDATE_SQL)){ ps.setString(1, p.getFirstName()); ps.setString(2, p.getLastName()); ps.setString(3, p.getEmail()); @@ -90,7 +96,7 @@ class PersonDAO implements AutoCloseable{ public boolean deletePerson(Person p) { checkConnection(); - try (PreparedStatement ps = conn.prepareStatement("DELETE FROM person WHERE id = ?")){ + try (PreparedStatement ps = conn.prepareStatement(DELETE_SQL)){ ps.setLong(1, p.getId()); ps.executeUpdate(); return true; diff --git a/src/main/java/table_view/TableViewSample.java b/src/main/java/table_view/TableViewSample.java index e6a8068154c2cb51c10abca3e7544f3ba037f6ad..8950e2f3d2589005723afae2b444a27de4f58661 100644 --- a/src/main/java/table_view/TableViewSample.java +++ b/src/main/java/table_view/TableViewSample.java @@ -4,6 +4,7 @@ import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.event.ActionEvent; +import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.scene.Group; import javafx.scene.Scene; @@ -23,9 +24,9 @@ import javafx.stage.WindowEvent; public class TableViewSample extends Application { - private TableView<Person> table = new TableView<Person>(); - - private final PersonDAO dao; + private final PersonDAO dao; + + private TableView<Person> table = new TableView<>(); private final ObservableList<Person> data; @@ -55,42 +56,17 @@ public class TableViewSample extends Application { label.setFont(new Font("Arial", 20)); table.setEditable(true); - - TableColumn<Person,String> firstNameCol = new TableColumn<>("First Name"); - firstNameCol.setMinWidth(100); - firstNameCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("firstName")); - firstNameCol.setCellFactory(TextFieldTableCell.forTableColumn()); - firstNameCol.setOnEditCommit(this::handleOnEditCommitFirstName); - - TableColumn<Person,String> lastNameCol = new TableColumn<>("Last Name"); - lastNameCol.setMinWidth(100); - lastNameCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("lastName")); - lastNameCol.setCellFactory(TextFieldTableCell.forTableColumn()); - lastNameCol.setOnEditCommit(this::handleOnEditCommitLastName); - - TableColumn<Person,String> emailCol = new TableColumn<>("Email"); - emailCol.setMinWidth(200); - emailCol.setCellValueFactory( - new PropertyValueFactory<Person, String>("email")); - emailCol.setCellFactory(TextFieldTableCell.forTableColumn()); - emailCol.setOnEditCommit(this::handleOnEditCommitEmail); - table.setItems(data); + TableColumn<Person, String> firstNameCol = constructColumn("First Name","firstName", this::handleOnEditCommitFirstName); + TableColumn<Person,String> lastNameCol = constructColumn("Last Name","lastName", this::handleOnEditCommitLastName); + TableColumn<Person,String> emailCol = constructColumn("Email","email",this::handleOnEditCommitEmail); table.getColumns().addAll(firstNameCol, lastNameCol, emailCol); - addFirstName = new TextField(); - addFirstName.setPromptText("First Name"); - addFirstName.setMaxWidth(firstNameCol.getPrefWidth()); - addLastName = new TextField(); - addLastName.setMaxWidth(lastNameCol.getPrefWidth()); - addLastName.setPromptText("Last Name"); - addEmail = new TextField(); - addEmail.setMaxWidth(emailCol.getPrefWidth()); - addEmail.setPromptText("Email"); - + + addFirstName = constructTextField(firstNameCol,"First Name"); + addLastName = constructTextField(lastNameCol,"Last Name"); + addEmail = constructTextField(emailCol,"Email"); final Button addButton = new Button("Add"); addButton.setOnAction(this::handleOnAdd); @@ -105,13 +81,25 @@ public class TableViewSample extends Application { ((Group) scene.getRoot()).getChildren().addAll(vbox); stage.setScene(scene); - fillTable(); stage.show(); stage.setOnCloseRequest(this::exitProgram); } - - private void fillTable() { - + + private TextField constructTextField(TableColumn<Person, String> column, String string) { + TextField result = new TextField(); + result.setPromptText("First Name"); + result.setMaxWidth(column.getPrefWidth()); + return result; + } + + private TableColumn<Person, String> constructColumn(String name, String propertyName, + EventHandler<CellEditEvent<Person, String>> callback) { + TableColumn<Person, String> col = new TableColumn<>(name); + col.setMinWidth(100); + col.setCellValueFactory(new PropertyValueFactory<>(propertyName)); + col.setCellFactory(TextFieldTableCell.forTableColumn()); + col.setOnEditCommit(callback); + return col; } private void handleOnAdd(ActionEvent e) {