OK, after some research and modification, I found the answer :
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;
import javax.swing.event.MouseInputAdapter;
public class Demo_Large_Custom_Cursor
{
  static private MyGlassPane myGlassPane;
  // Create the GUI and show it. For thread safety, this method should be invoked from the event-dispatching thread.
  private static void createAndShowGUI()
  {
    //Create and set up the window.
    JFrame frame=new JFrame("Demo_Large_Custom_Cursor");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //Start creating and adding components.
    JCheckBox changeButton=new JCheckBox("Custom Cursor \"visible\"");
    changeButton.setSelected(false);
    //Set up the content pane, where the "main GUI" lives.
    Container contentPane=frame.getContentPane();
    contentPane.setLayout(new FlowLayout());
    contentPane.add(changeButton);
    JButton Button_1=new JButton("<Html><Table Cellpadding=7><Tr><Td>A</Td><Td>B</Td></Tr><Tr><Td>C</Td><Td>D</Td></Tr></Table></Html>");
    Button_1.setPreferredSize(new Dimension(80,80));
    Button_1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Out("Button 1"); } });
    contentPane.add(Button_1);
    JButton Button_2=new JButton("<Html><Table Cellpadding=7><Tr><Td>1</Td><Td>2</Td></Tr><Tr><Td>3</Td><Td>4</Td></Tr></Table></Html>");
    Button_2.setPreferredSize(new Dimension(80,80));
    Button_2.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { Out("Button 2"); } });
    contentPane.add(Button_2);
    //Set up the menu bar, which appears above the content pane.
    JMenuBar menuBar=new JMenuBar();
    JMenu menu=new JMenu("Menu");
    menu.add(new JMenuItem("Do nothing"));
    menuBar.add(menu);
    frame.setJMenuBar(menuBar);
    //Set up the glass pane, which appears over both menu bar
    //and content pane and is an item listener on the change
    //button.
    myGlassPane=new MyGlassPane(changeButton,menuBar,frame.getContentPane());
    changeButton.addItemListener(myGlassPane);
    frame.setGlassPane(myGlassPane);
    //Show the window.
    frame.setLocationRelativeTo(null);
    frame.pack();
    frame.setVisible(true);
  }
  private static void out(String message) { System.out.print(message); }
  private static void Out(String message) { System.out.println(message); }
  public static void main(String[] args)
  {
    //Schedule a job for the event-dispatching thread:
    //creating and showing this application's GUI.
    javax.swing.SwingUtilities.invokeLater(new Runnable()
    {
      public void run()
      {
        createAndShowGUI();
      }
    });
  }
}
/**
 We have to provide our own glass pane so that it can paint.
 */
class MyGlassPane extends JComponent implements ItemListener
{
  Point point;
  //React to change button clicks.
  public void itemStateChanged(ItemEvent e)
  {
    setVisible(e.getStateChange()==ItemEvent.SELECTED);
  }
  protected void paintComponent(Graphics g)
  {
    try
    {
    if (point!=null)
    {
//      g.setColor(Color.red);
//      g.fillOval(point.x-10,point.y-10,20,20);
      BufferedImage image=ImageIO.read(new File("C:/Cursor_Crosshair.PNG"));
      g.drawImage(image,point.x-39,point.y-39,null);
    }
    }
    catch (Exception e) { }
  }
  public void setPoint(Point p)
  {
    point=p;
  }
  public MyGlassPane(AbstractButton aButton,JMenuBar menuBar,Container contentPane)
  {
    CBListener listener=new CBListener(aButton,menuBar,this,contentPane);
    addMouseListener(listener);
    addMouseMotionListener(listener);
  }
}
/**
 Listen for all events that our check box is likely to be interested in. Redispatch them to the check box.
 */
class CBListener extends MouseInputAdapter
{
  Toolkit toolkit;
  Component liveButton;
  JMenuBar menuBar;
  MyGlassPane glassPane;
  Container contentPane;
  public CBListener(Component liveButton,JMenuBar menuBar,MyGlassPane glassPane,Container contentPane)
  {
    toolkit=Toolkit.getDefaultToolkit();
    this.liveButton=liveButton;
    this.menuBar=menuBar;
    this.glassPane=glassPane;
    this.contentPane=contentPane;
  }
  public void mouseMoved(MouseEvent e)
  {
//    redispatchMouseEvent(e,false);
    redispatchMouseEvent(e,true);
  }
  public void mouseDragged(MouseEvent e)
  {
    redispatchMouseEvent(e,false);
  }
  public void mouseClicked(MouseEvent e)
  {
    redispatchMouseEvent(e,false);
  }
  public void mouseEntered(MouseEvent e)
  {
    redispatchMouseEvent(e,false);
  }
  public void mouseExited(MouseEvent e)
  {
    redispatchMouseEvent(e,false);
  }
  public void mousePressed(MouseEvent e)
  {
    redispatchMouseEvent(e,false);
  }
  public void mouseReleased(MouseEvent e)
  {
    redispatchMouseEvent(e,true);
  }
  //A basic implementation of redispatching events.
  private void redispatchMouseEvent(MouseEvent e,boolean repaint)
  {
    Point glassPanePoint=e.getPoint();
    Container container=contentPane;
    Point containerPoint=SwingUtilities.convertPoint(glassPane,glassPanePoint,contentPane);
    if (containerPoint.y<0)
    { //we're not in the content pane
      if (containerPoint.y+menuBar.getHeight()>=0)
      {
        //The mouse event is over the menu bar.
        //Could handle specially.
      }
      else
      {
        //The mouse event is over non-system window 
        //decorations, such as the ones provided by
        //the Java look and feel.
        //Could handle specially.
      }
    }
    else
    {
      //The mouse event is probably over the content pane.
      //Find out exactly which component it's over.  
      Component component=SwingUtilities.getDeepestComponentAt(container,containerPoint.x,containerPoint.y);
//      if ((component!=null) && (component.equals(liveButton)))
      if ((component!=null))
      {
        //Forward events over the check box.
        Point componentPoint=SwingUtilities.convertPoint(glassPane,glassPanePoint,component);
        component.dispatchEvent(new MouseEvent(component,e.getID(),e.getWhen(),e.getModifiers(),componentPoint.x,componentPoint.y,e.getClickCount(),e.isPopupTrigger()));
      }
    }
    //Update the glass pane if requested.
    if (repaint)
    {
      glassPane.setPoint(glassPanePoint);
      glassPane.repaint();
    }
  }
}
And the Cursor_Crosshair.PNG is like this :
