У меня следующая проблема:
Я хочу иметь компонент таблицы в стиле 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, а затем поддерживать показ / скрытие при двойном щелчке родительской строки.
Хотя я не уверен, как двигаться вперед ...
Итак, если у вас есть идеи, как мне поступить, пожалуйста, поделитесь своими идеями.
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 ...