sclass ConceptsTable { JTable table; Concepts concepts; Class conceptClass; Set dropFields; IF1> postProcess; Runnable afterUpdate; bool latestFirst; int idWidth = 50; IF1 renderer; JTable getTable() { init(); ret table; } void init { if (table != null) ret; if (concepts == null) concepts = db_mainConcepts(); if (renderer == null) renderer = defaultConceptRendererForTable(); table = sexyTable(); temp tempSetTL(awtOnConceptChanges_concepts, concepts); awtOnConceptChanges(table, 1000, r update); } void update swing { new L data; for (A c : list(concepts, conceptClass)) addIfNotNull(data, (Map) renderer.get(c)); if (latestFirst) reverseInPlace(data); data = (L) postProcess(postProcess, data); dataToTable_uneditable(data, table); pcallF(afterUpdate); } }