From 8d81f6139a59fcb1973fe0f522a695689168951f Mon Sep 17 00:00:00 2001
From: jez04 <david.jezek@post.cz>
Date: Wed, 7 Feb 2024 01:08:29 +0100
Subject: [PATCH] feat: make GUI responsible

---
 src/main/java/table_view/TableViewSample.java | 150 ++++++++++--------
 1 file changed, 85 insertions(+), 65 deletions(-)

diff --git a/src/main/java/table_view/TableViewSample.java b/src/main/java/table_view/TableViewSample.java
index a461dbd..ede832b 100644
--- a/src/main/java/table_view/TableViewSample.java
+++ b/src/main/java/table_view/TableViewSample.java
@@ -6,6 +6,7 @@ import javafx.collections.ObservableList;
 import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.geometry.Insets;
+import javafx.geometry.Pos;
 import javafx.scene.Group;
 import javafx.scene.Scene;
 import javafx.scene.control.Button;
@@ -16,80 +17,98 @@ import javafx.scene.control.TableView;
 import javafx.scene.control.TextField;
 import javafx.scene.control.cell.PropertyValueFactory;
 import javafx.scene.control.cell.TextFieldTableCell;
-import javafx.scene.layout.HBox;
-import javafx.scene.layout.VBox;
+import javafx.scene.layout.BorderPane;
+import javafx.scene.layout.GridPane;
+import javafx.scene.layout.Priority;
+import javafx.scene.layout.Region;
 import javafx.scene.text.Font;
 import javafx.stage.Stage;
 import javafx.stage.WindowEvent;
- 
+
 public class TableViewSample extends Application {
- 
+
 	private final PersonDAO dao;
-	
+
 	private TableView<Person> table = new TableView<>();
-    
-    private final ObservableList<Person> data;
-    
-    final HBox hb = new HBox();
+
+	private final ObservableList<Person> data;
+
+	final GridPane gridPane = new GridPane();
 	private TextField addFirstName;
 	private TextField addLastName;
 	private TextField addEmail;
- 
-    public static void main(String[] args) {
-        launch(args);
-    }
- 
-    public TableViewSample() {
-    	dao = new PersonDAO(new DerbyJDBCDialect());
-    	data = FXCollections.observableArrayList(dao.getAll());	
+
+	public static void main(String[] args) {
+		launch(args);
 	}
-    
-    @SuppressWarnings("unchecked")
+
+	public TableViewSample() {
+		dao = new PersonDAO(new DerbyJDBCDialect());
+		data = FXCollections.observableArrayList(dao.getAll());
+	}
+
+	@SuppressWarnings("unchecked")
 	@Override
-    public void start(Stage stage) {
-        Scene scene = new Scene(new Group());
-        stage.setTitle("Table View Sample");
-        stage.setWidth(450);
-        stage.setHeight(550);
- 
-        final Label label = new Label("Address Book");
-        label.setFont(new Font("Arial", 20));
- 
-        table.setEditable(true);
-        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 = constructTextField(firstNameCol,"First Name");
-        addLastName = constructTextField(lastNameCol,"Last Name");
-        addEmail = constructTextField(emailCol,"Email");
-        final Button addButton = new Button("Add");
-        addButton.setOnAction(this::handleOnAdd);
- 
-        hb.getChildren().addAll(addFirstName, addLastName, addEmail, addButton);
-        hb.setSpacing(3);
- 
-        final VBox vbox = new VBox();
-        vbox.setSpacing(5);
-        vbox.setPadding(new Insets(10, 0, 0, 10));
-        vbox.getChildren().addAll(label, table, hb);
-        
-        ((Group) scene.getRoot()).getChildren().addAll(vbox);
-        stage.setScene(scene);
-        
-        stage.show();
-        stage.setOnCloseRequest(this::exitProgram);
-    }
-
-	private TextField constructTextField(TableColumn<Person, String> column, String string) {
+	public void start(Stage stage) {
+		Scene scene = new Scene(new Group());
+		stage.setTitle("Table View Sample");
+		stage.setWidth(450);
+		stage.setHeight(550);
+
+		final Label label = new Label("Address Book");
+		label.setFont(new Font("Arial", 20));
+
+		table.setEditable(true);
+		table.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY_ALL_COLUMNS);
+		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 = constructTextField("First Name");
+		addLastName = constructTextField("Last Name");
+		addEmail = constructTextField("Email");
+		final Button addButton = new Button("Add");
+		addButton.setMinWidth(Region.USE_PREF_SIZE);
+		addButton.setOnAction(this::handleOnAdd);
+
+		gridPane.add(addFirstName, 0, 0);
+		gridPane.add(addLastName, 1, 0);
+		gridPane.add(addEmail, 2, 0);
+		gridPane.add(addButton, 3, 0);
+		GridPane.setHgrow(addFirstName, Priority.ALWAYS);
+		GridPane.setHgrow(addLastName, Priority.ALWAYS);
+		GridPane.setHgrow(addEmail, Priority.ALWAYS);
+		GridPane.setHgrow(addButton, Priority.NEVER);
+		gridPane.setHgap(5);
+		GridPane.setFillWidth(addButton, true);
+
+		final BorderPane borderPane = new BorderPane();
+		borderPane.setTop(label);
+		BorderPane.setMargin(label, new Insets(10));
+		BorderPane.setAlignment(label, Pos.CENTER);
+
+		borderPane.setCenter(table);
+		BorderPane.setMargin(table, new Insets(10));
+
+		borderPane.setBottom(gridPane);
+		BorderPane.setMargin(gridPane, new Insets(10));
+
+		scene.setRoot(borderPane);
+		stage.setScene(scene);
+
+		stage.show();
+		stage.setOnCloseRequest(this::exitProgram);
+	}
+
+	private TextField constructTextField( String string) {
 		TextField result = new TextField();
-		result.setPromptText("First Name");
-        result.setMaxWidth(column.getPrefWidth());
-        return result;
+		result.setPromptText(string);
+		return result;
 	}
 
 	private TableColumn<Person, String> constructColumn(String name, String propertyName,
@@ -110,24 +129,25 @@ public class TableViewSample extends Application {
 		addLastName.clear();
 		addEmail.clear();
 	}
-    
+
 	private void handleOnEditCommitFirstName(CellEditEvent<Person, String> t) {
 		Person p = t.getTableView().getItems().get(t.getTablePosition().getRow());
 		p.setFirstName(t.getNewValue());
 		dao.updatePerson(p);
 	}
-	
+
 	private void handleOnEditCommitLastName(CellEditEvent<Person, String> t) {
 		Person p = t.getTableView().getItems().get(t.getTablePosition().getRow());
 		p.setLastName(t.getNewValue());
 		dao.updatePerson(p);
 	}
-	
+
 	private void handleOnEditCommitEmail(CellEditEvent<Person, String> t) {
 		Person p = t.getTableView().getItems().get(t.getTablePosition().getRow());
 		p.setEmail(t.getNewValue());
 		dao.updatePerson(p);
 	}
+
 	private void exitProgram(WindowEvent evt) {
 		try {
 			dao.close();
-- 
GitLab