2017-02-15 25 views
0

これは本当にあなたのためのすべての簡単な質問は申し訳ありませんが、私は問題を抱えています。私はJavaFXアプリケーションを完成させようとしています。メソッドが別のクラスにあるときのJavaFXフィルタTableView

TableViewのフィルタリングに問題があります。私は検索入力としてTextFieldを持っていて、検索のための "Submit"ボタンとして機能するボタンを持っています。私はイベントリスナーを認識しており、TextFieldsがTableViewをフィルタリングすることはできません。私はそのオプションに反対していませんが、私はボタンの機能が必要です。

私はメインステージ用のMainControllerクラスを持っています。これは、2つのTableViewと検索入力フィールド/ボタンを格納する場所です。

さて、この方法は、「lookupProduct(int型のID)」と呼ばれますが、それは別のクラスである:インベントリ

だから、私の質問は、私は方法にメインコントローラから電話をかけることができる方法であり、インベントリクラスを作成し、その方法で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

にテーブルの上にFilteredList項目を設定することができましたか?とにかく '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); 
    } 
} 

私が作成する必要がありましたメソッドin Inventory.javaを設定するnControllerインスタンスの場合、TableViewをInventory.javaに送信して、TableViewからすべてのアイテムを取得できるようにしなければなりませんでした。その後、私はそれらの結果をフィルタリングすることができました。インベントリに設定されたメインコントローラインスタンスと

は、私はあなたがちょうど `MainController`に` lookUpProduct`を移動することができます メインコントローラ

関連する問題