【问题标题】:Using TreeTable with different root and node types使用具有不同根和节点类型的 TreeTable
【发布时间】:2011-08-05 13:30:17
【问题描述】:

我有以下问题:

我想要一个类似 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 组件,但是当子条目(节点??)与条目(叶子??)的类型相同时,我来的所有示例都是交叉显示用法。

到目前为止我的想法: 看到如果我使用一个表,列将共享相同的名称,我想我应该使用一个表和另一个表作为 TableCellRenderer,然后支持双击父行时显示/隐藏。

我不知道如何继续前进......

所以,如果您对我应该如何处理有任何想法,请分享您的想法。

更新

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

其他方法同上

非常感谢所有分享的人 他们的想法。另一个感谢 垃圾神……

【问题讨论】:

  • 我看不出问题所在。您的 TreeTableModel(如果您使用 this article)只需返回正确的对象。第一列的 ColumnClass 可以是两种节点类型的一些通用超类型,也可以只是 Object。

标签: java tablecellrenderer treetable


【解决方案1】:

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

【讨论】:

  • ` //我终于搞定了树表模型。下面是我所做的sn-p。私有列表 根; public EntryTreeTableModel(List root) { this.root = root; } public int getChildCount(Object parent) { if (parent instanceof List){ return ((ArrayList) parent).size(); }else if (parent instanceof Entry){ return ((Entry)parent).getSubEntries().size(); } 返回 0; } `
  • 为什么不将此代码示例移至您的问题?它会更容易阅读。
  • **感谢垃圾神,我已将那里的代码移至问题所在。我想知道发布解决方案的更好方法,但我没有想到这一点。 **
  • 看起来不错。因此,我对你的问题投了赞成票。请考虑接受这个答案。
  • 单击左侧的灰色复选标记。有关详细信息,请参阅faq
猜你喜欢
  • 2010-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
相关资源
最近更新 更多