Может кто-нибудь предложить, как я могу сделать это, чтобы показать динамический шаблон в VBox
.Ниже приведен мой код, и я хотел бы заключить отсортированный список в SearchVBox
, чтобы он мог показывать динамический шаблон, который ищут пользователи.В самом низу я привел пример того, что мне нужно сделать.
public class UserSearchController implements Initializable {
@FXML
private TextField filterField;
@FXML
private VBox SearchVbox;
private static final String productFilePath = "C:\\Users\\Cre8\\Desktop\\APU prgram\\APU sem3\\OODJ\\Product.txt";
List<CSVproduct> csvProducts = new ArrayList<>();
ObservableList<CSVproduct> data = FXCollections.observableArrayList(csvProducts);
/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
try {
addUserSearchNewPane();
} catch (IOException ex) {
Logger.getLogger(ViewProduct.class.getName()).log(Level.SEVERE, null, ex);
}
}
void addUserSearchNewPane() throws IOException{
Reader reader = Files.newBufferedReader(Paths.get(productFilePath));
CsvToBean<CSVproduct> csvToBean = new CsvToBeanBuilder(reader)
.withType(CSVproduct.class)
.withIgnoreLeadingWhiteSpace(true)
.build();
csvProducts = csvToBean.parse();
for (CSVproduct csvproduct : csvProducts) {
UserSearchTemplateController usersearchTC = new UserSearchTemplateController();
System.out.println(csvproduct.getProductName());
usersearchTC.setSearchName(csvproduct.getProductName());
usersearchTC.setSearchPrice(csvproduct.getProductPrice());
usersearchTC.setSearchQuantity(csvproduct.getProductQuantity());
usersearchTC.setSearchRate(csvproduct.getProductRate());
usersearchTC.setSearchDescription(csvproduct.getProductDescription());
usersearchTC.setSearchImage(csvproduct.getProductImage());
this.SearchVbox.getChildren().add(usersearchTC);
}
}
void UserFilterFunction(){
FilteredList<CSVproduct> filteredData = new FilteredList<>(data, p -> true);
filterField.textProperty().addListener((observable, oldValue, newValue) -> {
filteredData.setPredicate(csvproduct -> {
if (newValue == null || newValue.isEmpty()) {
return true;
}
String lowerCaseFilter = newValue.toLowerCase();
if (csvproduct.getProductName().toLowerCase().contains(lowerCaseFilter)) {
return true;
}
return false;
});
});
SortedList<CSVproduct> sortedData = new SortedList<>(filteredData);
this.SearchVbox.getChildren().add(sortedData);//how do i show the sortedlist insde the SearchVbox.
}
}
Последняя строка кода не работает. Как этот пример, чтобы отфильтровать и показать динамический шаблон VBox