static <A extends JComponent> A onHover(IVF1<Pt> action, A c) {
  if (c != null && action != null) swing {
    MouseAdapter ma = new MouseAdapter {
      public void mouseMoved(MouseEvent e) { pick(e); }
      public void mouseEntered(MouseEvent e) { pick(e); }
      public void mouseExited(MouseEvent e) { pick(null); }
      
      void pick(MouseEvent e) pcall {
        action.get(ptFromEvent(e));
      }
    };
    c.addMouseMotionListener(ma);
    c.addMouseListener(ma);
  }
  ret c;
}

static <A extends JComponent> A onHover(A c, IVF1<Pt> action) {
  ret onHover(action, c);
}