Il ne m'a pas été très facile de trouver des informations sur la mise en place d'un sablier, sujet pourtant classique. L'approche mise en oeuvre est inspirée d'une technique qui fonctionne bien avec Delphi.
Setting hourglass is quite a classic topic, but finding information about it was not very easy for me. Code is inspired of technique working properly with Delphi.
Avec les Swings, la solution idéale consiste à utiliser le glassPane,
calque normalement invisible qui peut recouvrir tout composant.
Je n'ai pas réussi à mettre en oeuvre cette solution.
Une autre solution consiste à
Voici le code, implémenté par une classe spécialisée : |
With Swings, all the work could be done using glassPane,
that covers the whole composant.
I was not able to do it this way.
You can also
here is code: |
import java.awt.Component; import java.awt.Container; import java.awt.Cursor; import java.util.Vector; import java.util.Enumeration; /** * Set cursor to hourglass, and restore original cursor. * @author Patrick Larreya, Jul 2000. */ public class CursorSetter { /** * No constructor : static methods only. */ private CursorSetter() { } /** * Set wait cursor : must be done recursively. */ public static void setWaitCursor(Component c) { Cursor curs = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR); setCursor(getTopParent(c), curs); } /** * Set default cursor : must be done recursively. * (could pause problem with components with non default cursors) */ public static void setDefaultCursor(Component c) { Cursor curs = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR); setCursor(getTopParent(c), curs); } /** * Set cursor : on component and all contained components if container */ public static void setCursor(Component c, Cursor curs) { c.setCursor(curs); if (c instanceof Container) { Component [] comps = ((Container)c).getComponents(); for (int i = 0; i < comps.length; i++) { setCursor(comps[i], curs); } } } /** * Find top container in hierarchy */ public static Component getTopParent(Component c) { Component parent = c.getParent(); if (parent == null) return c; return getTopParent(parent); } /** * Set wait cursor secured, if components with Non standard cursors. */ public static Vector setWaitCursorSecured(Component c) { Cursor curs = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR); Vector componentsCursors = new Vector(); setCursor(getTopParent(c), curs, componentsCursors); return componentsCursors; } /** * Set cursor secured : original cursors are saved */ public static void setCursor(Component c, Cursor curs, Vector componentsCursors) { componentsCursors.add(c); componentsCursors.add(c.getCursor()); c.setCursor(curs); if (c instanceof Container) { Component [] comps = ((Container)c).getComponents(); for (int i = 0; i < comps.length; i++) { setCursor(comps[i], curs, componentsCursors); } } } /** * Restore cursors from save list */ public static void restoreCursors(Vector componentsCursors) { Enumeration enum = componentsCursors.elements(); while (enum.hasMoreElements()) { Component c = (Component)enum.nextElement(); Cursor curs = (Cursor)enum.nextElement(); c.setCursor(curs); } } }
Patrick Larreya, Juillet 2000