svoid onUpdate(JComponent c, Runnable r) { onUpdate(c, (O) r); } svoid onUpdate(JTextComponent c, IVF1 r) { if (c == null || r == null) ret; c.getDocument().addDocumentListener(runnableToDocumentListener(-> r.get(c.getText()))); } // legacy signature svoid onUpdate(JComponent c, O r) { if (c cast JTextComponent) c.getDocument().addDocumentListener(runnableToDocumentListener(toRunnable(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); }