static A onChange(A spinner, O r) {
ret onChange(spinner, toRunnable(r));
}
static A onChange(A spinner, Runnable r) {
if (r != null)
swing { spinner.addChangeListener(changeListener(r)); }
ret spinner;
}
static A onChange(A b, Runnable r) {
swing { b.addItemListener(itemListener(r)); }
ret b;
}
svoid onChange(JTextComponent tc, Runnable r) {
onUpdate(tc, r);
}
static A onChange(A slider, Runnable r) {
swing { slider.addChangeListener(changeListener(r)); }
ret slider;
}
static JComboBox onChange(JComboBox cb, ChangeTriggerable r) {
ret onChange(cb, new ChangeTrigger(r));
}
static JComboBox onChange(JComboBox cb, Updateable r) {
ret onChange(cb, new UpdateTrigger(r));
}
static JComboBox onChange(JComboBox cb, IVF1 f) {
if (f != null) addActionListener(cb, -> f.get(getSelectedItem_typed(cb)));
ret cb;
}
// Note: JComboBox also supports addActionListener.
// Not sure if that would help us any.
static JComboBox onChange(JComboBox cb, Runnable r) {
if (isEditableComboBox(cb))
onChange(textFieldFromComboBox(cb), r);
else
onSelectedItem(cb, runnableToIVF1(r));
ret cb;
}
static A onChange(A tabs, Runnable r) {
swing { tabs.addChangeListener(changeListener(r)); }
ret tabs;
}
static A onChange(Runnable r, A cc) {
if (cc != null && r != null) swing {
cc.getSelectionModel().addChangeListener(changeListener(r));
}
ret cc;
}
static A onChange(A a, ChangeTriggerable b) {
if (a != null && b != null) a.onChange(new ChangeTrigger(b));
ret a;
}
static A onChange(A a, Updateable b) {
if (a != null && b != null) a.onChange(new UpdateTrigger(b));
ret a;
}
static A onChange(A a, Runnable r) {
if (a != null && r != null) a.onChange(r);
ret a;
}