Existe-t-il un moyen de masquer le curseur (autre que l'utilisation d'une image transparente comme curseur)?
Il semble que la classe Cursor
ne possède pas de curseur "vide" pour commencer, donc on pourrait définir un nouveau curseur "vide" en utilisant le Toolkit.createCustomCursor
méthode.
Voici une façon dont j'ai essayé et qui semble fonctionner:
// Transparent 16 x 16 pixel cursor image.
BufferedImage cursorImg = new BufferedImage(16, 16, BufferedImage.TYPE_INT_ARGB);
// Create a new blank cursor.
Cursor blankCursor = Toolkit.getDefaultToolkit().createCustomCursor(
cursorImg, new Point(0, 0), "blank cursor");
// Set the blank cursor to the JFrame.
mainJFrame.getContentPane().setCursor(blankCursor);
Modifier
En ce qui concerne le commentaire sur tout ce qui se trouve dans le JFrame
se terminant sans curseur, il semble que les Component
qui sont contenus dans le JFrame
finiront par hériter du curseur du conteneur ( JFrame
), donc s'il est nécessaire d'avoir un certain Component
pour que le curseur apparaisse, il faudrait régler manuellement le curseur souhaité.
Par exemple, s'il y a un JPanel
contenu dans le JFrame
, alors on pourrait placer le curseur de ce JPanel
sur la valeur par défaut du système en utilisant Cursor.getDefaultCursor
méthode:
JPanel p = ...
// Sets the JPanel's cursor to the system default.
p.setCursor(Cursor.getDefaultCursor());
tl; dr Les kits d'outils AWT sont toujours buggés en 2017 '; la bonne solution est donc d'appeler
w.setCursor( w.getToolkit().createCustomCursor(
new BufferedImage( 1, 1, BufferedImage.TYPE_INT_ARGB ),
new Point(),
null ) );
au lieu.
Selon page Javadoc pour createCustomCursor
,
Crée un nouvel objet curseur personnalisé. Si l'image à afficher n'est pas valide, le curseur sera masqué (rendu complètement transparent) et le hotspot sera réglé sur (0, 0).
Il en découlerait que
w.setCursor( w.getToolkit().createCustomCursor( null, null, null ) );
devrait faire l'affaire. Malheureusement, il y a un bug lié à ce cas NON géré par le code, voir par exemple http://bugs.Sun.com/bugdatabase/view_bug.do?bug_id=7150089 (ceci est particulièrement pour MacOS, mais en parcourant la source, vous pouvez facilement trouver qu'il n'y a pas de vérification pour le 1er paramètre Image
Validité de la valeur dans toute des implémentations de la plate-forme Toolkit
; il y a tracker.isErrorAny()
vérification, ce qui ne dans ce cas), donc passer null
ou invalide Image
lance simplement un NPEx.
frame.setCursor(frame.getToolkit().createCustomCursor(
new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0),
"null"));
Lorsque vous utilisez le LWJGL sous Mac OS, vous devez procéder comme suit:
System.setProperty("Apple.awt.fullscreenhidecursor","true");
Dans la documentation, il est dit que si l'image n'est pas valide, elle sera transparente par défaut, donc passer une image vide se traduira par un curseur transparent. Mais le passage de null
dans la méthode de l'image entraînera une exception.
Toolkit tk= getToolkit();
Cursor transparent = tk.createCustomCursor(tk.getImage(""), new Point(), "trans");
Je résous ce problème beaucoup plus facilement:
final Timer cursorTimer = new Timer(2000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getContentPane().setCursor(null);
}
});
cursorTimer.start();
addMouseMotionListener(new MouseMotionAdapter() {
@Override
public void mouseMoved(MouseEvent e) {
getGlassPane().setCursor(Cursor.getDefaultCursor());
cursorTimer.restart();
}
});