2014-11-08 97 views
3

我想把元素放在javafx的listview和treeview上,但是兩個控件都不會刷新它們的內容。我使用obvservable列表來控制項目,每次我刪除一個項目時,listview或treeview將它從數據源中刪除。但視圖不更新。我仍然看到所有的項目。唯一的區別是,刪除的項目不能再被選中。例如鏈接2顯示拼合的項目列表。圖片1顯示了它們拼合之前的項目。項目已摺疊,但舊條目仍可見。有沒有人知道這個問題的解決方案?謝謝大家對我的幫助javafx listview和treeview控件沒有正確重新繪製

鏈接1:treeview is not collapsed 鏈接2:treeview is collapsed but not updating old view

這是自定義電池廠我用它來顯示一個列表視圖:

public ListCell<T> call(final ListView<T> param) { 
     ListCell<T> cell = new ListCell<T>(){ 
      @Override 
      protected void updateItem(final T persistentObject, final boolean empty) { 
       super.updateItem(persistentObject, empty); 
       if(persistentObject instanceof POProcessStep){ 
        POProcessStep poProcessStep = (POProcessStep) persistentObject; 
        if (persistentObject != null) { 
         super.setText(poProcessStep.getId() + " - " + poProcessStep.getTitle()); 
        } 
       }else if(persistentObject instanceof POProcess){ 
        POProcess poProcess = (POProcess) persistentObject; 
        if (persistentObject != null) { 
         super.setText(poProcess.getId() + " - " + poProcess.getTitle()); 
        } 
       }else if(persistentObject instanceof POCategory){ 
        POCategory poCategory = (POCategory) persistentObject; 
        if(persistentObject != null){ 
         super.setText(poCategory.getId() + " - " + poCategory.getTitle()); 
        } 
       }else if(persistentObject instanceof String){ 
        if(persistentObject != null){ 
         super.setText(String.valueOf(persistentObject)); 
        } 
       } 
       super.setGraphic(null); 
      } 
     }; 
     return cell; 
    } 
+1

細胞工廠?如果是這樣,請發佈您的代碼。 – 2014-11-08 21:08:26

回答

13

你的電池工廠的updateItem(...)需要處理單元格爲空的情況。這將是完全的場景時,項項被刪除(或者因爲TreeView節點坍縮爲空),以及前一次顯示一個項目的小區再次作爲空單元格:您是否使用了自定義的

public ListCell<T> call(final ListView<T> param) { 
    ListCell<T> cell = new ListCell<T>(){ 
     @Override 
     protected void updateItem(final T persistentObject, final boolean empty) { 
      super.updateItem(persistentObject, empty); 
      if (empty) { 
       setText(null); 
       setGraphic(null); 
      } else { 
       // ... rest of your code. 
      } 
     } 
    } 
    return cell ; 
} 
+0

感謝您的回答。我確實有一個if(空)子句,但這提醒我要驗證所有我的更改都已在該子句中恢復(它們不是)。 – CMerrill 2015-08-03 00:53:58