【发布时间】: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