Я хочу создать POS-приложение.Я оцениваю способ, которым odoo erp создает список товаров для поиска.каждый продукт указан в контейнере с изображением и некоторыми сведениями о продукте.Я хочу сделать это в JavaFX, используя TilePane -> Hbox -> ImageView + Vbox -> Метки для каждого продукта.Итак, мне нужны предложения от экспертов.Что такое снижение производительности для 4000+ список продуктов.Есть ли способ правильно реализовать это в JavaFX
Вот фрагмент из кода контроллера:
/* The code get a list of products from database using JPA repositories
Create a filtredlist in to filter list based on textfiled
for each product :
create a Hbox node that contains ImageView and Vbox witch contains some lables
add the Hbox to Tilepane
*/
@FXML
TilePane tpListProduct;
@FXML
JFXTextField tfsearch;
private void initData() {
List<Product> productList = Lists.newArrayList(productRepository.findAll());
FilteredList<Product> filtredList = new FilteredList(FXCollections.observableArrayList(productList), e -> true);
ObjectProperty<Predicate<Product>> productFiltredPredicate = new SimpleObjectProperty<>();
productFiltredPredicate.bind(Bindings.createObjectBinding(() ->
product -> {
if (Objects.equals(product.getNameFR(), null))
return false;
if (product.getNameFR().toLowerCase().contains(tfsearch.getText().trim().toLowerCase()))
return true;
else return false;
}
, tfsearch.textProperty()));
filtredList.predicateProperty().bind(productFiltredPredicate);
productFiltredPredicate.addListener((observable, oldValue, newValue) -> {
tpListProduct.getChildren().clear();
filtredList.forEach(product -> {
tpListProduct.getChildren().add(createProductTile(product));
});
});
}
private Node createProductTile(Product product) {
String cssLayout = "-fx-border-color: red;\n" +
"-fx-border-insets: 5;\n" +
"-fx-border-width: 3;\n" +
"-fx-border-style: dashed;\n";
HBox hBox = new HBox();
hBox.setStyle(
cssLayout
);
VBox vBox = new VBox();
ImageView iv = new ImageView();
iv.setFitWidth(200);
iv.setFitHeight(200);
// iv.setViewport(new Rectangle2D(2, 2, 2, 2));
if (product.getImagePath() != null)
iv.setImage(new Image("file:///" + product.getImagePath()));
vBox.getChildren().add(new Label(product.getNameFR()));
hBox.getChildren().addAll(iv, vBox);
hBox.setOnMouseClicked(event -> {
System.out.println(event.getSource());
});
return hBox;
}