abstract sclass CollectIOExamples > DynModule { new L examples; transient JList examplesList; srecord Example(S question, S answer) { toString { ret question + " -> " + answer; } } JComponent visualize() { ret withCenteredButtons(listPopupMenuThreaded(examplesList = jLiveValueList(dm_fieldLiveValue('examples)), "Delete Example", voidfunc(S row) { temp enter(); setField(examples := listMinusToString(examples, row)) }), buttons()); } O[] buttons() { ret litobjectarray("Add example...", rThread addExampleDialog); } void addExampleDialog { final JTextField tfQuestion = jtextfield(), tfAnswer = jtextfield("?"); showFormTitled("Add example", "Question:", tfQuestion, "Answer (if known):", tfAnswer, r { temp enter(); setField(examples := listPlus(examples, new Example(gtt(tfQuestion), gtt(tfAnswer)))); }); } }