Utiliser les "clics" de la souris

     

En cliquant, vous dessinez un petit cercle ou un disque de couleur aléatoire. Essayez les trois boutons de la souris, et appuyez aussi en même temps sur la touche "shift". Vous devez constater une différence.

alt : l'applet n'est pas visible par votre navigateur (dans le menu Outils, Modules complémentaires, activer le plugin Java(TM) Platform SE 6 U32 6.0.320.5 s'il est désactivé)

Voici le code d'une application faisant surgir une fenêtre dont l'intérieur correspond à ce que l'on voit ci-dessus.

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.Color;
import java.awt.Graphics;;
import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.ArrayList;
import java.util.Random;

class CercleGraphique {
private int x,y;
private Color couleur;
private int rayon;
private boolean plein;

CercleGraphique(int rayon, int x, int y, Color couleur, boolean plein) {
this.rayon = rayon;
this.x = x;
this.y = y;
this.couleur = couleur;
this.plein = plein;
}

public void dessiner(Graphics g) {
g.setColor(couleur);
if (plein) g.fillOval(x - rayon, y - rayon, 2*rayon, 2*rayon);
else g.drawOval(x - rayon, y - rayon, 2*rayon, 2*rayon);
}
}

class Controleur extends MouseAdapter {
private Clics panneau;
private Random alea = new Random();
Controleur(Clics panneau) {
this.panneau = panneau;
}

public void mousePressed(MouseEvent evt) {
CercleGraphique c;
int rayon = 5;
boolean plein = false;

if (SwingUtilities.isMiddleMouseButton(evt)) rayon = 10;
else if (SwingUtilities.isRightMouseButton(evt)) rayon = 15;
if ((evt.getModifiers() & MouseEvent.SHIFT_MASK) != 0) plein = true;
c = new CercleGraphique(rayon, evt.getX(), evt.getY(),
new Color(Math.abs(alea.nextInt())), plein);
panneau.getListe().add(c);
panneau.repaint();
}
}

public class Clics extends JPanel {
private ArrayList liste = new ArrayList();

Clics() {
setPreferredSize(new Dimension(250, 250));
addMouseListener(new Controleur(this));
}

public void paintComponent(Graphics g) {
super.paintComponent(g);
for(CercleGraphique cercle : liste) cercle.dessiner(g);
}

ArrayList getListe() {
return liste;
}
}

class EssaiClics {
public static void main(String[] arg) {
JFrame monCadre = new JFrame("Des bulles de couleur");
monCadre.setContentPane(new Clics());
monCadre.pack();
monCadre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
monCadre.setVisible(true);
}
}

Vous pouvez trouver :
  • le code de l'application.
  • le code de l'applet.
    MouseAdapter : l'interface java.awt.event.MouseListener correspond aux événements de type MouseEvent. Cette interface déclare les méthodes :
    • public void mousePressed(MouseEvent evt);
    • public void mouseReleased(MouseEvent evt);
    • public void mouseEntered(MouseEvent evt);
    • public void mouseExited(MouseEvent evt);
    • public void mouseClicked(MouseEvent evt);
    La classe java.awt.event.MouseAdapter étend ces cinq méthodes et les définit avec un corps vide. Dans notre programme, la classe Controleur étend la classe MouseAdapter, ce qui permet de ne redéfinir que les méthodes qui nous intéressent pour notre application.
    SwingUtilities.isMiddleMouseButton(evt) : on peut savoir grâce à cette méthode si evt correspond ou non à un clic sur le bouton du milieu.
    evt.getModifiers() & MouseEvent.SHIFT_MASK : cette quantité est différente de zéro si et seulement si l'utilisateur a actionné la touche "shift" pendant qu'il clique avec la souris.
    Random alea = new Random(); : on crée un générateur pseudo-aléatoire de nombres.
    © Irène Charon , Télécom - ParisTech 2010