abstract sclass DynObjectTable extends DynModule { new L data; transient JTable table; transient F1 itemToMap; void start { super.start(); itemToMap = func(A a) -> Map { a instanceof S ? litorderedmap("" := (S) a) : humanizeKeys(objectToMap(a)) }; onChange(r updateMe); } JComponent visualize() { table = dataToTable_uneditable(sexyTable(), map(itemToMap, data)); onDoubleClickOrEnter(table, voidfunc(int row) { A a = _get(data, row); if (a != null) onDoubleClick(a); }); ret table; } void unvisualize() { table = null; } void onDoubleClick(A line) {} void update() { if (table != null) dataToTable_uneditable(table, map(itemToMap, data)); } void dontPersist() { _persistenceInfo = mapPlus(_persistenceInfo, data := false); } void clear() { syncClear(data); change(); } void add(A a) { syncAdd(data, a); change(); } void setData(L data) { setField(data := cloneList(data)); } }