2017-02-15 11 views
0

對不起,如果這對於大家都是非常簡單的問題,但我遇到了麻煩。我正在嘗試完成一個JavaFX應用程序,而我即將完成。JavaFX Filter TableView當方法在另一個類中時

我無法過濾TableView。我有一個TextField作爲我的搜索輸入和一個按鈕來充當我的「提交」按鈕來搜索。我知道事件監聽器和什麼不適用於TextFields篩選TableView。我不反對這種選擇,但是,我需要按鈕功能。

我有一個MainController類爲我的主舞臺,這就是我住兩個TableViews和搜索輸入字段/按鈕。現在

,該方法被稱爲「lookupProduct(INT ID)」,但是,它是在另一個類:庫存

所以,我的問題是,如何才能讓從MainController調用該方法在庫存類,並過濾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); 
} 

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

任何幫助,指導,您可以提供建議,將不勝感激。謝謝!

+0

你能不能移動'lookUpProduct'到'MainController'?無論如何,它看起來就像'MainController'一樣。 –

+0

我假設你沒有'MainController'的實例變量,這就是爲什麼它不工作。 –

+0

你在哪裏加載這些是控制器的每個FXML文件? –

回答

0

要解決這個問題,我不得不做一些不同的事情:

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

MainController.java

@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設置Mai nController實例,然後必須發送TableView到Inventory.java以允許我從TableView中獲取所有項目。然後讓我過濾這些結果。

隨着MainController比如在庫存設置,當時我能夠設置表上的FilteredList項目在MainController

相關問題