diff --git a/core-java/src/main/java/com/baeldung/javafx/Main.java b/core-java/src/main/java/com/baeldung/javafx/Main.java index 1107804ad2..f68121b394 100644 --- a/core-java/src/main/java/com/baeldung/javafx/Main.java +++ b/core-java/src/main/java/com/baeldung/javafx/Main.java @@ -19,6 +19,8 @@ public class Main extends Application { AnchorPane page = (AnchorPane) loader.load(); Scene scene = new Scene(page); + scene.getStylesheets().add("/search.css"); + primaryStage.setTitle("Title goes here"); primaryStage.setScene(scene); primaryStage.show(); diff --git a/core-java/src/main/java/com/baeldung/javafx/model/Person.java b/core-java/src/main/java/com/baeldung/javafx/model/Person.java new file mode 100644 index 0000000000..dd473e84b4 --- /dev/null +++ b/core-java/src/main/java/com/baeldung/javafx/model/Person.java @@ -0,0 +1,61 @@ +package com.baeldung.javafx.model; + +import javafx.beans.property.*; + +public class Person { + + private SimpleIntegerProperty id; + private SimpleStringProperty name; + private SimpleBooleanProperty isEmployed; + + public Person(Integer id, String name, boolean isEmployed) { + this.id = new SimpleIntegerProperty(id); + this.name = new SimpleStringProperty(name); + this.isEmployed = new SimpleBooleanProperty(isEmployed); + } + + public int getId() { + return id.get(); + } + + public IntegerProperty idProperty() { + return id; + } + + public void setId(int id) { + this.id.set(id); + } + + public String getName() { + return name.get(); + } + + public StringProperty nameProperty() { + return name; + } + + public void setName(String name) { + this.name.set(name); + } + + public boolean getIsEmployed() { + return isEmployed.get(); + } + + public BooleanProperty isEmployedProperty() { + return isEmployed; + } + + public void setIsEmployed(boolean isEmployed) { + this.isEmployed.set(isEmployed); + } + + @Override + public String toString() { + return "Person{" + + "id=" + id + + ", name='" + name + '\'' + + ", isEmployed=" + isEmployed + + '}'; + } +} diff --git a/core-java/src/main/java/com/baeldung/javafx/view/SearchController.java b/core-java/src/main/java/com/baeldung/javafx/view/SearchController.java index b3dec4134f..dc3abdd3e9 100644 --- a/core-java/src/main/java/com/baeldung/javafx/view/SearchController.java +++ b/core-java/src/main/java/com/baeldung/javafx/view/SearchController.java @@ -1,20 +1,18 @@ package com.baeldung.javafx.view; +import com.baeldung.javafx.model.Person; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.scene.Node; -import javafx.scene.control.Button; -import javafx.scene.control.Pagination; -import javafx.scene.control.TextField; -import javafx.scene.image.Image; +import javafx.scene.control.*; import javafx.scene.input.KeyCode; import javafx.scene.layout.VBox; -import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; public class SearchController { @@ -26,20 +24,17 @@ public class SearchController { private Button searchButton; @FXML private Pagination pagination; + @FXML + private Label searchLabel; - private ObservableList masterData = FXCollections.observableArrayList(); - + private ObservableList masterData = FXCollections.observableArrayList(); public SearchController() { - + masterData.add(new Person(5, "John", true)); + masterData.add(new Person(7, "Albert", true)); + masterData.add(new Person(11, "Monica", false)); } - /** - * Initializes the controller class. This method is automatically called - * after the fxml file has been loaded. - *

- * Initializes the table columns and sets up sorting and filtering. - */ @FXML private void initialize() { @@ -47,12 +42,18 @@ public class SearchController { searchButton.setText("Search"); searchButton.setOnAction(event -> loadData()); + searchButton.setStyle("-fx-background-color: slateblue; -fx-text-fill: white;"); + searchField.setOnKeyPressed(event -> { if (event.getCode().equals(KeyCode.ENTER)) { loadData(); } }); + searchField.textProperty().addListener((observable, oldValue, newValue) -> { + searchLabel.setText(newValue); + }); + pagination.setPageFactory(SearchController.this::createPage); } @@ -60,7 +61,13 @@ public class SearchController { VBox iconContainer = new VBox(); - //iconContainer.getChildren().add(myGrid); + TableView tableView = new TableView<>(masterData); + TableColumn id = new TableColumn("ID"); + TableColumn name = new TableColumn("NAME"); + TableColumn employed = new TableColumn("EMPLOYED"); + + tableView.getColumns().addAll(id, name, employed); + iconContainer.getChildren().add(tableView); return iconContainer; } @@ -69,29 +76,26 @@ public class SearchController { String searchText = searchField.getText(); - Task> task = new Task>() { + Task> task = new Task>() { @Override - protected List call() throws Exception { - updateMessage("Loading images"); - - List result = new ArrayList<>(); - - return result; + protected List call() throws Exception { + updateMessage("Loading data"); + return masterData + .stream() + .filter(value -> value.getName().toLowerCase().contains(searchText)) + .collect(Collectors.toList()); } }; -// task.setOnRunning((e) -> loadingDialog.show()); task.setOnSucceeded(event -> { - List data = task.getValue(); - data.forEach(url -> masterData.add(new Image(url))); + List data = task.getValue(); + data.forEach(p -> masterData.add(p)); pagination.setVisible(true); pagination.setPageCount(masterData.size() / PAGE_ITEMS_COUNT); }); Thread th = new Thread(task); - th.setDaemon(true); - th.start(); } diff --git a/core-java/src/main/resources/SearchController.fxml b/core-java/src/main/resources/SearchController.fxml index 54be1061e8..a894b0260b 100644 --- a/core-java/src/main/resources/SearchController.fxml +++ b/core-java/src/main/resources/SearchController.fxml @@ -14,9 +14,10 @@ -