簡體   English   中英

使用具有不同根和節點類型的TreeTable

[英]Using TreeTable with different root and node types

我有以下問題:

我希望有一個類似JTeeTable的表組件,除了根(下面的類)和樹的節點不是同一類型。

例如,假設我有以下類:

public final class Entry {

    private int id;
    private String title;
    private String notes;

    private List<SubEntry> subEntryList; /** @see SubEntry*/
}


public final class SubEntry{
    private int id;
    private String title;
    private String notes;

}

雖然這兩個類看起來相似並且可能激發繼承的情況, 但它們並不是那樣相關的 可以把它想象成一輛帶有汽車零件清單的車或帶有演員名單的電影。

兩個星期以來,我一直試圖想辦法在視覺上呈現上述內容。 我想過使用JTreeTable組件,但是當子條目(節點??)與條目(leaf ??)屬於同一類型時,我所有的例子都是交叉顯示用法。

我的想法到目前為止:看到如果我使用表,列將共享相同的名稱,我認為我應該使用表和另一個表作為TableCellRenderer,然后雙擊父行支持顯示/隱藏。

我不知道如何向前邁進......

所以,如果您有任何想法我應該如何解決這個問題,請分享您的想法。

UPDATE

//I finally managed to sort out the tree table model.
//Below is the snippet of what I have done. 

        private List<Entry> root; 

        public EntryTreeTableModel(List<Entry> root) { 
              this.root = root;
        } 

    public int getChildCount(Object parent) { 

      if (parent instanceof List){ 
             return ((ArrayList<Entry>) parent).size(); 
      }else if (parent instanceof Entry){ 
            return ((Entry)parent).getSubEntries().size(); 
      } 
     return 0; 
   }

   public Object getChild(Object parent, int index) {
        if (parent instanceof List){
            return ((ArrayList<Entry>) parent).get(index);
        }else if (parent instanceof Entry){
            return ((Entry)parent).getSubEntries().get(index);
        }else if (parent instanceof Entry){
            return ((SubEntry)parent); // Hmmm, this feels wrong. Check later.
        }
            return "...";  // Just to indicate that something went wrong
    }

其他方法遵循相同的方法

非常感謝所有分享他們想法的人。 另外感謝Trashgod ......

org.netbeans.swing.outline.Outline類似乎是一個很好的候選者,如本例所示 特別是, Outline使用javax.swing.tree.TreeModel ,它“接受任何類型的對象作為樹節點”。 將模型與示例進行比較, Entry對應於目錄, SubEntry將對應於其中包含的文件列表。 請參閱為相關示例創建數據模型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM