2016-11-28 32 views
0

目標是過濾tableView。因此,當我輸入某些東西來過濾它時工作得很好,但是當我點擊退格或刪除textField區域上的輸入返回時, tableView顯示表中沒有內容,然後我不得不重新啓動程序重新加載並顯示數據。數據被保存並從xml文件加載。tableView過濾器,表中沒有任何輸入

另外,我把數據類上的聯繫人ObservaleList加載和存儲contactList,但在控制器上我有一個類似的過濾器列表,然後控制器擴展數據類getContacts從那裏添加filtredList到它。我非常肯定,問題來自於

public Data() { 
     contacts = FXCollections.observableArrayList(); 
    } 

public ObservableList<Contact> getContacts() { 
    return contacts; 
} 

這是在過濾網下面處理

public void filterContactList(String oldValue, String newValue) { 
    ObservableList<Contact> filteredList = FXCollections.observableArrayList(); 
    if (filterInput == null || newValue.length() < oldValue.length() || newValue == null){ 
     contactsTable.setItems(getContacts()); 
    }else { 
     newValue = newValue.toUpperCase(); 
     for (Contact contact: contactsTable.getItems()){ 
      String filterFirstName = contact.getFirstName(); 
      String filterLastName = contact.getFirstName(); 
      if (filterFirstName.toUpperCase().contains(newValue) || filterLastName.toUpperCase().contains(newValue)){ 
       filteredList.add(contact); 
      } 
     } 
     contactsTable.setItems(filteredList); 
    } 
} 

,這是init監聽

filterInput.textProperty().addListener(new ChangeListener<String>() { 
      @Override 
      public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
       filterContactList((String) oldValue, (String) newValue); 
      } 
     }); 

回答

0

幫自己一個忙的使用FilteredList適用於此:

private FilteredList<Contact> filteredContacts = new FilteredList<>(getContacts());  

... 

contactsTable.setItems(filteredList); 

... 

public void filterContactList(String oldValue, String newValue) { 
    if (newValue == null) { 
     filteredContacts.setPredicate(null); 
    } else { 
     final String lower = newValue.toLowerCase(); 
     filteredContacts.setPredicte(contact -> contact.getFirstName().toLowerCase().contains(lower) || contact.getLastName().toLowerCase().contains(lower)); 
    } 
} 

BTW:因爲這是從聽衆filterInputtextProperty調用的,所以我刪除了支票null

相關問題