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