tableView过滤器,表中没有输入

时间:2016-11-28 06:46:33

标签: uitableview user-interface javafx

目标是过滤tableView。所以,当我输入一些东西来过滤它工作得很好,但是当我点击退格键或删除textField区域上的输入以返回时,tableView显示没有内容在表格中,然后我必须重新启动程序以重新加载并显示数据。数据将从xml文件中保存和加载。

另外,我在Data Class上放置了一个Observale列表来加载和存储contactList,但是在Controller上我有一个类似的过滤器列表,然后控制器将数据类从那里扩展到getContacts并添加filtredList到它。我非常确定问题来自那个

require "nokogiri"
require "open-uri"

url = # your url
doc = Nokogiri::HTML.parse(open(url))

tables = doc.css("table").select do |table|
  # consider only the first row of each table
  first_row = table.css("tr").first

  # check if that row's children contains a <th> element
  first_row.children.map(&:name).include?("th")
end

这低于过滤器句柄

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

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

这是init侦听器

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

1 个答案:

答案 0 :(得分: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:由于这是从听众调用filterInput的{​​{1}},我删除了textProperty的支票。