【发布时间】:2017-02-15 15:17:22
【问题描述】:
如果这对你们来说真的很简单,我很抱歉,但我遇到了麻烦。我正在尝试完成一个 JavaFX 应用程序,并且快完成了。
我在过滤 TableView 时遇到问题。我有一个 TextField 作为我的搜索输入,还有一个按钮作为我的“提交”按钮进行搜索。我知道事件侦听器以及 TextFields 不能过滤 TableView 的内容。我不反对这个选项,但是,我需要按钮功能。
我的主舞台有一个 MainController 类,在那里我放置了两个 TableView 和搜索输入字段/按钮。
现在,该方法称为“lookupProduct(int id)”,但它位于另一个类中:Inventory
所以,我的问题是,如何从 MainController 调用 Inventory 类中的方法,并以这种方式过滤 TableView?对不起。我无法发布代码,但我可以提供尽可能好的示例。
包含方法.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);
}
MainController.java
@FXML
private void handleLookupProduct(ActionEvent event) {
Inventory inv = new Inventory();
String searchText = productsSearchInput.getText();
if (searchText.length() != 0) {
inv.lookupProduct(searchText);
} else {
AlertBox.display("WAIT!", "Please enter a value to search!", 450);
}
}
您可以提供的任何帮助、指导和建议将不胜感激。谢谢!
【问题讨论】:
-
你能把
lookUpProduct移到MainController吗?看起来它需要的一切都在MainController中。 -
我假设您没有
MainController的实例变量,这就是它不起作用的原因。 -
您在哪里加载每个作为控制器的 FXML 文件?
-
@HypnicJerk 该方法必须在该类中。主控制器包含我需要过滤的表。另一个类包含查找产品(过滤器)的方法。
-
@James_D FXML 加载器位于 MainController 类中。他们根据事件需要加载其他控制器。因此,在 MainController 类中指定了搜索输入和表。从那里,如您在上面看到的,我有一个事件将搜索字符串发送到 ContainsMethod 类(例如),如果您进一步看上面,如果我试图过滤表的位置。没有调用新的控制器,也没有打开/切换阶段。
标签: java uitableview javafx