Cercle jaune autour du curseur en Java

J'essaie de comprendre comment faire un cercle jaune autour du curseur en Java. Le fait est que nous avons un enregistreur d'écran qui (évidemment) enregistre l'écran. L'utilisation des mots-clés "Cercle jaune autour du curseur en Java" sur Google ne m'amène à comment ajouter un cercle jaune autour du curseur sur un MAC, sur WM et d'autres applications, mais pas comment le faire en Java sur un ordinateur l'application commence.

Comment puis-je le faire sans utiliser d'images existantes? Dessiner un simple cercle jaune avec une certaine opacité serait la chose la plus facile à faire, en le faisant suivre la souris sur l'écran. Et aussi, s'il est possible de le faire disparaître et réapparaître lorsque l'utilisateur clique sur un bouton de la souris, ce serait génial.

0
Avez-vous trouvé une solution ?
ajouté l'auteur coding_idiot, source
@ michael667 Eh bien, puisque je ne trouve rien d'autre que la façon de changer le curseur, il est assez difficile d'essayer de faire quelque chose. Je n'ai trouvé aucun exemple réel ni aucune théorie sur la façon de le faire. Et ma connaissance JAVA n'est pas avancée non plus. Je développe des sites Web habituellement.
ajouté l'auteur Nemo Caligo, source
@Subs Si vous voulez parler de Swing, alors oui, même si je ne suis pas sûr de savoir comment cela pourrait m'aider à comprendre quelle classe utiliser pour rendre le curseur plus visible. La chose est la bibliothèque de swing java est un peu énorme. Je veux dire, il est assez facile de trouver les souris-auditeurs .. Mais il est plus difficile de comprendre comment faire un cercle autour de la souris.
ajouté l'auteur Nemo Caligo, source
@Sub, C'est vrai, cependant, je ne suis toujours pas sûr de savoir comment faire en sorte que ce panneau suive toujours la souris. De plus, je ne suis pas sûr que cela fonctionne comme en JavaScript, que vous preniez un événement mouseMove et que vous changiez la position x | y de ce panneau, obteniez les coordonnées x | y de la souris et plaçiez les panneaux au centre x | y s'en tenir à la position x | y de la souris. Si cela fonctionne, serait-il trop exigeant sur l'ordinateur utilisant l'application, ou l'utilisateur utilisant l'application ne remarquerait-il aucun retard? Ce sont toutes de
ajouté l'auteur Nemo Caligo, source
Oui, vérifiez la réponse ci-dessous. C'était la façon la plus simple de le faire.
ajouté l'auteur Nemo Caligo, source
Avez-vous entendu parler de Swings ?
ajouté l'auteur Subs, source
@NanashiDri, si vous le savez, vous devriez avoir compris que vous pouvez mettre un panneau transparent comme couche supérieure et dessiner un cercle à partir de la position du pointeur de la souris et lorsque vous cliquez sur ( mousePressed ) panneau afin que votre panneau arrière prenne votre événement mousereleased .
ajouté l'auteur Subs, source

2 Réponses

Il n'est pas possible d'ajouter un cercle autour du pointeur de souris existant. Vous pouvez uniquement définir le pointeur de la souris sur une image complète.

0
ajouté
Merci pour votre réponse, mais je crains que ce ne soit pas la solution. Si j'avais trouvé une réponse en cherchant, je n'aurais pas demandé ici. Le problème est que je ne veux pas changer complètement le curseur de la souris. Je veux juste créer un cercle jaune autour d'elle. Et ma question était si c'est possible sans utiliser d'images.
ajouté l'auteur Nemo Caligo, source
Je l'ai. Merci d'avoir répondu. Je vais marquer votre réponse comme la réponse à cette question, car je ne pense pas qu'il soit possible de marquer les commentaires comme des réponses acceptées.
ajouté l'auteur Nemo Caligo, source
Il n'est pas possible d'ajouter un cercle autour du pointeur de souris existant. Vous pouvez uniquement définir le pointeur de la souris sur une image complète.
ajouté l'auteur michael667, source

Il est possible de le faire en attachant un MouseMotionListener à votre composant, mais il faudra un peu de travail pour le faire fonctionner exactement comme vous le voulez.

Je voudrais partir de quelque chose comme ceci:

private static final double RADIUS    = 15.0;
private static final double DIAMETER  = 2.0 * RADIUS;
private static final Color  XOR_COLOR = Color.yellow;

private static Shape m_circle = null;

@Override
public void mouseMoved(MouseEvent e)
{
    Graphics2D g2     = (Graphics2D) getGraphics();
    Point      p      = e.getPoint();
    Shape      circle = new Ellipse2D.Double(p.getX() - RADIUS, p.getY() - RADIUS, DIAMETER, DIAMETER);

    clearCircle(g2);

    g2.setXORMode(XOR_COLOR);
    g2.draw(circle);
    g2.setPaintMode();

    m_circle = circle;
}

private void clearCircle(Graphics2D g2)
{
    if (m_circle != null)
    {
        g2.setXORMode(XOR_COLOR);
        g2.draw(m_circle);
        g2.setPaintMode();

        m_circle = null;
    }
}

Il sera également nécessaire de s'assurer que l'ancien cercle est effacé sur l'événement mouseExited que vous pouvez écouter en ajoutant un MouseListener. Cela a également les événements mousePressed/mouseReleased/mouseClicked dont vous avez besoin pour le faire disparaître/réapparaître sur le clic de souris d'un utilisateur.

Utiliser XOR est pratique car il est très facile de restaurer l'écran en repeignant la même forme avec la même couleur et le même style, mais ce n'est pas tout à fait ce que vous avez demandé. Il est possible de réparer l'écran en capturant une image de la zone sur laquelle vous allez dessiner le cercle. Le cercle peut être retiré de l'écran en repeignant la zone endommagée avant de peindre un cercle dans une nouvelle position.

0
ajouté
getGraphics() d'où vient-il?
ajouté l'auteur coding_idiot, source
pouvez-vous poster un exemple de travail complet? J'ai essayé quelque chose mais ça n'a pas marché.
ajouté l'auteur coding_idiot, source
getGraphics() provient à l'origine de java.awt.Component mais ce code nécessite une sous-classe qui renvoie une instance de Graphics2D, telle que javax.swing.JComponent
ajouté l'auteur richj, source
Le code dans ma réponse est juste l'implémentation de mouseMoved (...) pour une classe implémentant MouseMotionListener. Si vous avez besoin d'un exemple complet d'application Java, ce tutoriel Java fournit un bon point de départ: docs.oracle.com/javase/tutorial/uiswing/events/… - vous devriez pouvoir remplacer l'implémentation de stub de mouseMoved avec mon code.
ajouté l'auteur richj, source