IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Cacher le curseur de la souris


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut Cacher le curseur de la souris
    Bonjour,

    Pour les besoins d'une application Swing sur écran tactile, j'ai besoin de pouvoir cacher le curseur de la souris.

    Ce code fonctionne bien sur mes JFrame ou JDialog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setCursor(container.getToolkit().createCustomCursor(new BufferedImage(3, 3, BufferedImage.TYPE_INT_ARGB), new Point(0, 0), null));
    Le problème ici est que si je suis sur une JDialog, le curseur ne s'affiche pas sur la fenetre active, mais il s'affiche en dehors, meme si ma dialog s'affiche par-dessus une jframe (qui n'affiche pas le curseur)!

    Comment je pourrais faire pour cacher ce curseur dans tous les cas? Est-ce qu'il y a une propriété windows qui me permettrait de le cacher par l'API windows?

    Merci d'avance pour votre aide, je m'arrache les cheveux là dessus!

    Seb

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Pas d'idée? Moi de mon coté je n'ai toujours pas trouvé de solution.

    J'ai tenté ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    User32 lib2 = (User32)Native.loadLibrary("user32",User32.class);
    int i = lib2.ShowCursor(false);
    // i vaut -1
    Sans succès, mais je dois avouer que je ne connais pas bien cette librairie et son utilisation.

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Tu pourrais utiliser un Dialog "soft" consistant en un JComponent que tu places dans le glasspane (qui se fera bloquant bien sûr).
    Ce qui te permettra de ne plus utiliser de JDialog et t'évitera toute autres problèmes de ce genre (sans parler de hack plus ou moins moches, et chiants à maintenir/débugger).

    Et je recommande fortement l'utilisation du JLayer à cet effet. (JXLayer de SwingX si tu es en version < 7 de java)

    http://docs.oracle.com/javase/tutori...sc/jlayer.html

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Ok je vois bien l'idée, merci. Mais en l'occurence là ce n'est plus possible, toutes les JDialog existent et l'appli est fonctionnelle donc plus possible de revenir là dessus

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    J'ai cherché un peu sur Google et j'ai trouvé qu'il n'y a qu'une unique solution: remplacer le curseur de ta souris par une image quand celui-ci se trouve dans la fenêtre. Voici un copier-coller de ce que j'ai trouvé et ça semble fonctionner sans trop de problèmes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int[] pixels = new int[16 * 16];
    Image image = Toolkit.getDefaultToolkit().createImage(
            new MemoryImageSource(16, 16, pixels, 0, 16));
    Cursor transparentCursor =
            Toolkit.getDefaultToolkit().createCustomCursor
                 (image, new Point(0, 0), "invisibleCursor");
    ou alors en un peu plus simple j'ai trouvé aussi ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Toolkit tk = Toolkit.getDefaultToolkit();
    Image img = tk.getImage("image.gif");
    Cursor monCurseur = tk.createCustomCursor(img, new Point(16, 16), "mon image");
    setCursor(monCurseur);
    Et bien-sur, il suffit que ton image soit entièrement transparente pour que le curseur deviennent totalement invisible!

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Hello!

    Merci mais ca ne m'aide pas beaucoup, ceci ne cache le curseur que sur la fenetre active mais pas en dehors.

    C'est très compliqué de le cacher en dehors, je n'ai encore trouvé aucune solution. Aujourd'hui ce que je fais c'est que je déplace le curseur au milieu de ma popup pour le cacher, mais si l'utilisateur clique en dehors il réapparaitra

  7. #7
    Membre actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 149
    Par défaut
    Et bien je ne sais pas si ça va fonctionner mais tu n'as qu'à définir l'image pour le curseur sur la fenêtre "inactive" quand une JDialog est ouverte. Tu rajoutes les quelques lignes juste après l'affichage de la dialog et tu remet par défaut à la fermeture.

    Sinon tu peux tenter la même chose avec des dialogs internes et il y a plus de chances que ça fonctionne. Le souci c'est que ça ne collera pas forcément à ce que tu veux faire... :/

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2006
    Messages : 81
    Par défaut
    Ah oui, bonne idée ca! Je vais tenter le coup! Merci du tuyau

Discussions similaires

  1. [CSS] Curseur de la souris
    Par Furius dans le forum Mise en page CSS
    Réponses: 8
    Dernier message: 19/11/2005, 10h53
  2. Curseur de la souris
    Par dynobremo dans le forum Composants VCL
    Réponses: 2
    Dernier message: 27/09/2004, 14h26
  3. reposition du curseur de la souris!
    Par bakonu dans le forum Windows
    Réponses: 2
    Dernier message: 09/06/2004, 18h17
  4. [TP][FAQ]Curseur de la souris
    Par nounetmasque dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 29/06/2003, 23h22
  5. Comment masquer le curseur de la souris ?
    Par benj63 dans le forum C++Builder
    Réponses: 4
    Dernier message: 26/06/2002, 18h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo