J'utilise JOGL2 et les API NativeWindow pour écrire une application en Java. Quel est le meilleur moyen de cacher le curseur de la souris? Je n'utilise pas JFrame pour créer une fenêtre mais plutôt GLWindow à partir de JOGL. GLWindow n'a pas de méthode setCursor. Est-ce encore possible?Comment cacher le curseur de la souris en utilisant JOGL2?
Répondre
Comme vous le (thekidder) dire GLWindow
n'a pas cette capacité donc j'utiliser GLCanvas
dans un Frame
(ou JFrame
) comme celui-ci (comme Alexr a écrit):
public static void main(String... args) {
// create the cursor
Toolkit t = Toolkit.getDefaultToolkit();
Image i = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB);
Cursor noCursor = t.createCustomCursor(i, new Point(0, 0), "none");
// try it with a normal frame
Frame f = new Frame();
// create the GLCanvas and add it to the frame
GLCanvas canvas = new GLCanvas();
frame.add(canvas);
f.setCursor(noCursor);
f.setSize(400, 200);
f.setVisible(true);
}
Si la souris se trouve dans la zone de la fenêtre de l'application, vous pouvez définir n'importe quelle image comme un curseur personnalisé. Utilisez l'image transparente 1x1 pixel. Je l'ai utilisé - fonctionne bien. C'est une API normale, pas de JOGL, pas de code natif.
Après quelques recherches plus poussées, il semble que ceci n'est pas encore implémenté pour les fenêtres NEWT dans JOGL2. Il y a une demande d'amélioration déposée sur le bugzilla de JOGL: http://jogamp.org/bugzilla/show_bug.cgi?id=409
Ceci a depuis été implémenté dans JOGL2 en utilisant NEWT (un objet GLWindow). Voir https://jogamp.org/bugzilla/show_bug.cgi?id=409 (référencé dans la réponse thekidder).
Vous pouvez le faire comme ceci:
glWindow.setPointerVisible(false);
À l'heure actuelle avec ASPIC GLWindow:
window = GLWindow.create(caps);
...
window.requestFocus();
window.setAlwaysOnTop(true); // i think, be on top is good than mouse is jailed
window.setUndecorated(true); // remove window borders (if u want)
window.setPointerVisible(false); // hide cursor
window.confinePointer(true); // jail inside (cursor will be limited to window borders)
J'ai effectué ma question - est-ce possible sans utiliser un JFrame? – thekidder
@thekidder: Voir la nouvelle réponse! – dacwe
Oui, c'était mon soupçon. Merci! – thekidder