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

Interfaces Graphiques en Java Discussion :

Modifier le curseur


Sujet :

Interfaces Graphiques en Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 31
    Points : 34
    Points
    34
    Par défaut Modifier le curseur
    Bonjour,

    Je developpe une application pour laquelle j'ai besoin d'avoir un curseur plus gros que les 32x32 autorisés par la methode createCustomCursor.
    Je pense essayer de contourner ce problème en affichant une image à la position du curseur rendu invisible.

    Question 1 : Comment simplement cacher le curseur ? Y a t'il une meilleure solution (plus 'esthetique') que de remplacer son icone par une image vide ?

    Question 2 : Est-il toujours possible de recuperer les evènements de mouvement et clic d'un curseur invisible ?

    Question 3 : Comment créer une image qui va se deplacer au dessus de l'application à la place du curseur ?

    Merci pour vos propositions.
    The first Rule of the fight Club is , you don't talk about fight club ...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    31
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Comme j'ai mis en place une solution, je répond à mes questions pour ceux que ça pourrait interesser.

    1/ Je n'ai pas trouvé d'autre solution qu'une image transparente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int[] pixels = new int[16 * 16];
    Image image = Toolkit.getDefaultToolkit().createImage( new MemoryImageSource(16, 16, pixels, 0, 16));
    Cursor invisibleCursor =  Toolkit.getDefaultToolkit().createCustomCursor (image, new Point(0, 0), "invisiblecursor");
    this.setCursor(invisibleCursor);
    2/ Oui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    public void mouseClicked(MouseEvent e) {
         this.redispatchMouseEvent(e);
    }
     
    public void mouseEntered(MouseEvent e) {
         this.redispatchMouseEvent(e);
    }
     
    public void mouseExited(MouseEvent e) {
         this.redispatchMouseEvent(e);
    }
     
    public void mousePressed(MouseEvent e) {
         this.redispatchMouseEvent(e);
    }
     
    public void mouseReleased(MouseEvent e) {
         this.redispatchMouseEvent(e);
    }
     
    public void mouseDragged(MouseEvent e) {
         this.redispatchMouseEvent(e);
         this.glassPaneComponent.setCursorPosition(e.getX(), e.getY());
         this.glassPaneComponent.repaint();
    }
     
    public void mouseMoved(MouseEvent e) {
         this.glassPaneComponent.setCursorPosition(e.getX(), e.getY());
         this.glassPaneComponent.repaint();
    }
     
    private void redispatchMouseEvent(MouseEvent e) {
     
         Point glassPanePoint = e.getPoint();		
         Container container = this.container;
         Point containerPoint = SwingUtilities.convertPoint(this.glassPaneComponent, glassPanePoint,  this.container);
     
         if (containerPoint.y > 0) {         
              Component component = SwingUtilities.getDeepestComponentAt(container, containerPoint.x, containerPoint.y);
     
              if (component != null) {
     
                   Point componentPoint = SwingUtilities.convertPoint(this.glassPaneComponent,  glassPanePoint, component);                
                   component.dispatchEvent(new MouseEvent(
                   component, e.getID(), e.getWhen(), e.getModifiers(), 
                    		componentPoint.x,  componentPoint.y,  
                    		e.getClickCount(),  e.isPopupTrigger()));
              }
         }        
    }
    3/ Creation d'un composant GassPane associé à la JFrame qui est abonné aux mouvements de la souris.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setGlassPane(glassPaneComponent)
    Creation de l'icone qui va être affichée à la place de la souris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.cursorImg =  this.toBufferedImage(Toolkit.getDefaultToolkit().getImage(imgPath));
    Surcharge de la methode paintComponent du galssPaneComponent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void paintComponent(Graphics g) {	
         if( (this.cursorPosition != null) && (this.isVisible())) {
              g.drawImage(this.cursorImg,
                        this.cursorPosition.x-this.cursorImg.getWidth()/2, 
                        this.cursorPosition.y-this.cursorImg.getHeight()/2,
                        (ImageObserver)null);
              }
    }
    Si vous avez d'autres alternatives, ou solution plus 'propres', n'hesitez pas.
    The first Rule of the fight Club is , you don't talk about fight club ...

  3. #3
    Membre actif

    Étudiant
    Inscrit en
    Mai 2006
    Messages
    200
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2006
    Messages : 200
    Points : 276
    Points
    276
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BufferedImage bufferedImage = new BufferedImage(16, 16, Transparency.TRANSLUCENT);
    Cursor cursor = Toolkit.getDefaultToolkit().createCustomCursor(bufferedImage, new Point(), "cursor");
    setCursor(cursor);
    J'ai une solution, qui n'est pas mal non plus je pense !!!

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 43
    Points : 32
    Points
    32
    Par défaut
    merci poru cette réponse,

    je cherchait justement à mettre un curseur invisible

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Modifier un curseur
    Par pprev94 dans le forum Windows
    Réponses: 4
    Dernier message: 11/12/2008, 15h39
  2. Probleme+modifier le curseur de la souris
    Par nonna dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 11/04/2008, 09h27
  3. Comment modifier le curseur par défaut de l'application
    Par homeostasie dans le forum Visual C++
    Réponses: 2
    Dernier message: 28/06/2007, 16h56
  4. Modifier un curseur par une image
    Par daninho dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 28/01/2006, 21h32
  5. [Curseur] Modifier le curseur lors d'un clic bouton
    Par Casp dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 01/12/2005, 11h45

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