当方法位于另一个类中时,JavaFX筛选器TableView
如果这对你们来说真的是个简单的问题,我很抱歉,但我有麻烦了。我正在尝试完成一个JavaFX应用程序,我几乎完成了 我在筛选TableView时遇到问题。我有一个文本字段作为搜索输入,还有一个按钮作为“提交”按钮进行搜索。我知道事件监听器和什么不适合TextFields来过滤TableView。我不反对这个选项,但是,我需要按钮功能 我的主阶段有一个MainController类,在那里我有两个tableview和搜索输入字段/按钮 现在,该方法被称为“lookupProduct(intid)”,但它位于另一个类中:Inventory 所以,我的问题是,如何从MainController调用Inventory类中的方法,并以这种方式过滤TableView?我很抱歉。我不能发布代码,但我可以提供尽可能好的示例 ContainsMethod.java当方法位于另一个类中时,JavaFX筛选器TableView,java,uitableview,javafx,Java,Uitableview,Javafx,如果这对你们来说真的是个简单的问题,我很抱歉,但我有麻烦了。我正在尝试完成一个JavaFX应用程序,我几乎完成了 我在筛选TableView时遇到问题。我有一个文本字段作为搜索输入,还有一个按钮作为“提交”按钮进行搜索。我知道事件监听器和什么不适合TextFields来过滤TableView。我不反对这个选项,但是,我需要按钮功能 我的主阶段有一个MainController类,在那里我有两个tableview和搜索输入字段/按钮 现在,该方法被称为“lookupProduct(intid)”,
private MainController mainController;
.....
void lookUpProduct(int id){
FilteredList<Product> filteredList = new FilteredList<Product>(maincontroller.productsTableView.getItems());
filteredList.stream()
.filter(item -> item.getName() == name)
.findAny()
.ifPresent(item -> {
maincontroller.productsTableView.getSelectionModel().select(item);
maincontroller.productsTableView.scrollTo(item);
});
maincontroller.productsTableView.setItems(filteredList);
}
如果您能提供任何帮助、指导和建议,我们将不胜感激。谢谢大家! 为了解决这个问题,我不得不做一些不同的事情: Inventory.java
private MainController main;
@FXML private TableView<Product> productTableView;
public void setProductTableView(TableView<Product> main){
this.productTableView = main;
}
public void setMainView(MainController main){ this.main = main; }
void lookupProduct(String name){
FilteredList<Product> filteredList = new FilteredList<Product>(productTableView.getItems());
filteredList.stream()
.filter(item -> item.getName().equalsIgnoreCase(name))
.findAny()
.ifPresent(item -> {
productTableView.getSelectionModel().select(item);
productTableView.scrollTo(item);
});
main.productsTableView.setItems(filteredList);
}
@FXML
private void handleLookupProduct(ActionEvent event) {
Inventory inv = new Inventory();
String searchText = productsSearchInput.getText();
if (searchText.length() != 0) {
inv.setMainView(this);
inv.setProductTableView(productsTableView);
inv.lookupProduct(searchText);
} else {
AlertBox.display("WAIT!", "Please enter a value to search!", 450);
}
}
我必须在Inventory.java中创建一个方法来设置MainController实例,然后必须将TableView发送到Inventory.java,以允许我从TableView获取所有项目。这样我就可以过滤这些结果了
在Inventory中设置了MainController实例后,我就可以在MainController中的表上设置FilteredList项。您可以将
lookUpProduct
移动到MainController
吗?看起来它需要的一切都在MainController
中。我假设你没有MainController
的实例变量,这就是为什么它不工作的原因。你在哪里加载这些控制器对应的每个FXML文件?@HypnicJerk该方法必须在该类中。主控制器包含我需要筛选的表。另一个类包含查找产品(筛选器)的方法。@James\u D FXML加载程序位于MainController类中。它们根据事件的需要加载其他控制器。因此,搜索输入和表在MainController类中指定。从那里,正如您在上面看到的,我有一个事件将搜索字符串发送到ContainsMethod类(例如),如果您进一步查看上面的内容,如果我尝试在其中筛选表,则会看到该类。未调用新控制器,或未打开/切换阶段。
@FXML
private void handleLookupProduct(ActionEvent event) {
Inventory inv = new Inventory();
String searchText = productsSearchInput.getText();
if (searchText.length() != 0) {
inv.setMainView(this);
inv.setProductTableView(productsTableView);
inv.lookupProduct(searchText);
} else {
AlertBox.display("WAIT!", "Please enter a value to search!", 450);
}
}