使用具有不同根和节点类型的TreeTable

时间:2011-04-14 13:31:29

标签: java tablecellrenderer treetable

我遇到以下问题:

我希望有一个类似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,然后双击父行支持show / hide。

我不确定如何向前迈进......

所以,如果您有任何想法,请分享您的想法。

更新

//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 ...

1 个答案:

答案 0 :(得分:4)

根据org.netbeans.swing.outline.Outline的建议,课程example似乎是一个很好的候选人。特别是,Outline使用javax.swing.tree.TreeModel,它“接受任何类型的对象作为树节点”。将您的模型与example's进行比较,Entry将对应一个目录,SubEntry将对应于其中包含的文件列表。有关相关示例,请参阅Creating a Data Model