2017-02-15 5 views
0

Прошу прощения, если это действительно простой вопрос для всех вас, но у меня проблемы. Я пытаюсь выполнить приложение JavaFX, и я почти готов.JavaFX Filter TableView, когда метод находится в другом классе

У меня возникли проблемы с фильтрацией TableView. У меня есть TextField как мой вход для поиска и кнопка, чтобы действовать как моя кнопка «Отправить» для поиска. Я знаю слушателей событий и что не для TextFields для фильтрации TableView. Я не против этого варианта, но мне нужна функциональность кнопок.

У меня есть класс MainController для моей основной сцены, и именно там я размещаю два табличных элемента и кнопку ввода/ввода.

Теперь метод называется «lookupProduct (интермедиат идентификатор)», но это в другом классе: Инвентарь

Итак, мой вопрос, как я могу сделать звонок от 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

Смежные вопросы