svoid onUpdate(JComponent c, Runnable r) { onUpdate(c, (O) r); } // legacy signature svoid onUpdate(JComponent c, O r) { if (c cast JTextComponent) c.getDocument().addDocumentListener(runnableToDocumentListener(r)); else if (c cast ItemSelectable) // JCheckBox and others c.addItemListener(new ItemListener { public void itemStateChanged(ItemEvent e) { pcallF(r); } }); else if (c cast JSpinner) onChange(c, r); else print("Warning: onUpdate doesn't know " + getClassName(c)); } static void onUpdate(L l, O r) { for (JComponent c : l) onUpdate(c, r); }