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) {