java-tutorials/javafx/src/main/java/com/baeldung/view/SearchController.java

102 lines
3.1 KiB
Java
Raw Normal View History

package com.baeldung.view;
import com.baeldung.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.*;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.VBox;
2020-10-24 17:15:44 +03:00
import javafx.scene.control.cell.PropertyValueFactory;
import java.util.stream.Collectors;
public class SearchController {
public static final int PAGE_ITEMS_COUNT = 10;
@FXML
private TextField searchField;
@FXML
private Button searchButton;
@FXML
private Label searchLabel;
2020-10-24 17:15:44 +03:00
@FXML
private TableView tableView;
@FXML
private VBox dataContainer;
private ObservableList<Person> masterData = FXCollections.observableArrayList();
2020-10-24 17:15:44 +03:00
private ObservableList<Person> results = FXCollections.observableList(masterData);
public SearchController() {
masterData.add(new Person(5, "John", true));
masterData.add(new Person(7, "Albert", true));
masterData.add(new Person(11, "Monica", false));
}
@FXML
private void initialize() {
// search panel
searchButton.setText("Search");
searchButton.setOnAction(event -> loadData());
searchButton.setStyle("-fx-background-color: #457ecd; -fx-text-fill: #ffffff;");
searchField.setOnKeyPressed(event -> {
if (event.getCode().equals(KeyCode.ENTER)) {
loadData();
}
});
searchField.textProperty().addListener((observable, oldValue, newValue) -> {
searchLabel.setText(newValue);
});
2020-10-24 17:15:44 +03:00
initTable();
2020-10-24 17:15:44 +03:00
}
2020-10-24 17:15:44 +03:00
private void initTable() {
tableView = new TableView<>(FXCollections.observableList(masterData));
TableColumn id = new TableColumn("ID");
2020-10-24 17:15:44 +03:00
id.setCellValueFactory(new PropertyValueFactory("id"));
TableColumn name = new TableColumn("NAME");
2020-10-24 17:15:44 +03:00
name.setCellValueFactory(new PropertyValueFactory("name"));
TableColumn employed = new TableColumn("EMPLOYED");
2020-10-24 17:15:44 +03:00
employed.setCellValueFactory(new PropertyValueFactory("isEmployed"));
tableView.getColumns().addAll(id, name, employed);
dataContainer.getChildren().add(tableView);
}
private void loadData() {
String searchText = searchField.getText();
Task<ObservableList<Person>> task = new Task<ObservableList<Person>>() {
@Override
protected ObservableList<Person> call() throws Exception {
updateMessage("Loading data");
return FXCollections.observableArrayList(masterData
.stream()
.filter(value -> value.getName().toLowerCase().contains(searchText))
.collect(Collectors.toList()));
}
};
task.setOnSucceeded(event -> {
2020-10-24 17:15:44 +03:00
results = task.getValue();
tableView.setItems(FXCollections.observableList(results));
});
2020-10-24 17:15:44 +03:00
Thread th = new Thread(task);
th.setDaemon(true);
th.start();
}
}