2010-11-30 7 views
3

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

4

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); 
} 
+0

J'ai effectué ma question - est-ce possible sans utiliser un JFrame? – thekidder

+0

@thekidder: Voir la nouvelle réponse! – dacwe

+0

Oui, c'était mon soupçon. Merci! – thekidder

1

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.

2

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); 
0

À 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) 
Questions connexes