次の問題があります。
ツリーのルート (以下のクラス) とノードが同じ型ではないことを除いて、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;
}
これらの 2 つのクラスは似ており、継承のケースの動機となる可能性がありますが、そのように関連していません。車のパーツのリストを載せた車、または俳優のリストを載せた映画と考えてください。
この 2 週間、私は上記を視覚的に表現する方法を考え続けてきました。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
}
同じアプローチに従う他の方法
アイデアを共有してくれたすべての人に感謝します。Trashgod にもう一度感謝します...