Récupérer la position de la souris sans avoir a cliquer

Résolu/Fermé
ElexXVII
Messages postés
45
Date d'inscription
dimanche 10 août 2014
Statut
Membre
Dernière intervention
1 juillet 2017
- 6 sept. 2015 à 21:21
 ElexXVII - 6 sept. 2015 à 23:36
Bonjour, je voudrait savoir si il était possible de récupérer la position (X et Y) de la souris sur une JFrame SANS avoir besoin de cliquer.

public class Panel extends JPanel
{
	public void paintComponent(Graphics g)
	{
		g.setColor(Color.darkGray);
		g.fillRect(0, 0, 500, 700);
	}
}
Je voudrait changer la couleur du rectangle lorsque la souris passe dessus, j'ai esseyer de cree ma propre classe rectangle, en vain ..

Si qqun a une solution. Merci, et a bientôt !

2 réponses

Utilisateur anonyme
6 sept. 2015 à 21:36
0
ElexXVII
Messages postés
45
Date d'inscription
dimanche 10 août 2014
Statut
Membre
Dernière intervention
1 juillet 2017
1
6 sept. 2015 à 21:44
Merci de m'avoir répondu mais,
J'ai déjà vue cette technique, elle permet de récupérer la positions de la souris lorsque clique, je voudrait changer la couleur du rectangle quand la souris passe dessus et non quand on clique dessus car je sait déjà le faire.
0
KX
Messages postés
16581
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
26 juillet 2022
2 972
6 sept. 2015 à 22:11
Bonjour,

Je trouve ça moche d'associer un "rectangle" à un JPanel.
Un Panel est fait pour contenir des Component, là tu n'as pas du tout de notion de Container, tu fais un Component, le JPanel ne sert à rien...

D'autre part, ce que tu cherches à faire c'est une vérification de la forme à l'intérieur de ton composant, ce qui signifie que tu as un "sous-composant" mais dans les concepts de Swing ça n'existe pas. Tu peux faire de la composition de Component, mais dans des Container, pas avec des if dans le paint...

Pour moi, il te faudrait donc un Component qui dessines ton Rectangle, mais dont l'intégralité de la zone du composant serait ton rectangle. C'est à dire que ton composant c'est ton rectangle, ton rectangle c'est ton composant (c'est l'idée qu'il y a derrière une classe "Rectangle").

Du coup il suffirait de récupérer l'événement quand la souris entres ou sort du composant, ce qui coïncidera toujours avec un rectangle.

Exemple :

import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;

public class Rectangle extends Component {
    private static final long serialVersionUID = 1L;

    private Color backgroundColor;

    public Rectangle(final Color active, final Color inactive) {
        backgroundColor = inactive;

        addMouseListener(new MouseListener() {

            @Override
            public void mouseEntered(MouseEvent e) {
                backgroundColor = active;
                repaint();
            }

            @Override
            public void mouseExited(MouseEvent e) {
                backgroundColor = inactive;
                repaint();
            }
            
            public void mouseReleased(MouseEvent e) {}
            public void mousePressed(MouseEvent e) {}
            public void mouseClicked(MouseEvent e) {}
        });
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.setColor(backgroundColor);
        g.fillRect(0, 0, getWidth(), getHeight());
    }

    public static void main(String args[]) {
        Rectangle rect = new Rectangle(Color.GREEN, Color.RED);
        rect.setBounds(100, 100, 200, 100);

        JFrame frame = new JFrame();
        frame.setSize(400, 400);
        frame.setLayout(null);
        frame.add(rect);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
}

Remarque : ici c'est simple parce que c'est un rectangle (et que les Component sont rectangulaire par défaut), mais il est également possible de faire des composants qui ne soient pas rectangulaire, rond par exemple.
Mais ce n'est pas un dessin rond dans un composant rectangulaire, mais bien tout le composant qui est rond, de sorte qu'en dehors du rond on n'est plus sur le composant, même à l'intérieur du rectangle où il pourrait être contenu.
0
Merci pour ton aide j'essaye sa des que possible ;)
0