当方法位于另一个类中时,JavaFX筛选器TableView

当方法位于另一个类中时,JavaFX筛选器TableView,java,uitableview,javafx,Java,Uitableview,Javafx,如果这对你们来说真的是个简单的问题,我很抱歉,但我有麻烦了。我正在尝试完成一个JavaFX应用程序,我几乎完成了 我在筛选TableView时遇到问题。我有一个文本字段作为搜索输入,还有一个按钮作为“提交”按钮进行搜索。我知道事件监听器和什么不适合TextFields来过滤TableView。我不反对这个选项,但是,我需要按钮功能 我的主阶段有一个MainController类,在那里我有两个tableview和搜索输入字段/按钮 现在,该方法被称为“lookupProduct(intid)”,

如果这对你们来说真的是个简单的问题,我很抱歉,但我有麻烦了。我正在尝试完成一个JavaFX应用程序,我几乎完成了

我在筛选TableView时遇到问题。我有一个文本字段作为搜索输入,还有一个按钮作为“提交”按钮进行搜索。我知道事件监听器和什么不适合TextFields来过滤TableView。我不反对这个选项,但是,我需要按钮功能

我的主阶段有一个MainController类,在那里我有两个tableview和搜索输入字段/按钮

现在,该方法被称为“lookupProduct(intid)”,但它位于另一个类中:Inventory

所以,我的问题是,如何从MainController调用Inventory类中的方法,并以这种方式过滤TableView?我很抱歉。我不能发布代码,但我可以提供尽可能好的示例

ContainsMethod.java

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);
    }
}