abstract sclass DynObjectTable extends DynModule {
new L data;
transient JTable table;
transient F1 itemToMap;
void start {
super.start();
itemToMap = func(A a) -> Map { humanizeKeys(objectToMap(a)) };
onChange(r updateMe);
}
JComponent visualize() {
table = dataToTable_uneditable(sexyTable(), 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 clear() { syncClear(data); change(); }
void add(A a) { syncAdd(data, a); change(); }
void setData(L data) { setField(+data); }
}