sclass JImageSwitch > JLabel { S onImageID, offImageID; S offToolTip, onToolTip; IVarWithNotify var; bool on; InstantNeverHideToolTip toolTip; *(S *onImageID, S *offImageID, IVarWithNotify *var) { toolTip = new InstantNeverHideToolTip(this); bindListenerToComponent(this, var, r { set(var!) }); on = var!; updateIcon(); onLeftClick(this, l0 flip); } selfType setToolTips(S onTooltip, S offToolTip) { this.onToolTip = onToolTip; this.offToolTip = offToolTip; updateIcon(); this; } // overriding getToolTipText doesn't work for JLabel?! @Override public S getToolTipText() { S toolTip = or(on ? onToolTip : offToolTip, super.getToolTipText()); ret _print(+toolTip); } void updateIcon { /*if (onToolTip != null || offToolTip != null) setToolTipText(_print(setToolTipText := on ? onToolTip : offToolTip));*/ toolTip.setText(on ? onToolTip : offToolTip); setIcon(imageIcon(loadImage2_cached(on ? onImageID : offImageID))); } void flip { set(!on); } void set(bool value) swing { if (on != value) { on = value; updateIcon(); var.set(on); } } bool isOn() { ret on; } }