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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
| import java.awt.*;
import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
import java.awt.geom.*;
import java.util.*;
import java.sql.*;
public class Cave extends JComponent implements MouseMotionListener, MouseListener {
// taille de la fenetre
private int dimensionComponentX = 470;
private int dimensionComponentY = 490;
// tableau contenant les lignes
private final ArrayList<MyCircle> circles = new ArrayList<MyCircle>();
private int rows;
private int columns;
private int intr;
private int intc;
private int type;
private String couleur;
private JDialog popup = null;
private int count = 0;
// constructeur
public ListenerOnCircle(int rows, int columns, int intr, int intc, int type, String couleur, int quantite) {
this.setPreferredSize(new Dimension(dimensionComponentX, dimensionComponentY));
// ajout du listener de déplacement de la souris
this.addMouseMotionListener(this);
this.addMouseListener(this);
this.rows = rows;
this.columns = columns;
this.intr = intr;
this.intc = intc;
this.type = type;
this.couleur = couleur;
this.quantite = quantite;
for (,,) {//Construction des lignes de cercles
for (,,) {//Construction des colonnes
//On saute la construction...
//...
Cave.this.addNewCircle(lig, col, lar, lon, j, i);
//...
}
}
repaint();
}
//Méthode pour ajouter un nouveau cercle.
public void addNewCircle(double x, double y, double w, double h, int coordL, int coordC) {
circles.add(new MyCircle(x, y, w, h));
circles.get(circles.size() - 1).setL(coordL + 1);
circles.get(circles.size() - 1).setC(coordC + 1);
}
//Méthode pour afficher les cercles et les chiffres.
public void paint(Graphics g) {
if (popup != null) {
popup.dispose();
popup.setVisible(false);
}
count++;
System.out.println("paint " + count);
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//...
//On passe les boucles pour afficher les chiffres...
//...
for (int i=0; i<circles.size(); i++) {
//Boucle pour attribuer une couleur aux cercles.
if (circles.get(i).isActivated()) {
//Si le cercle a été "activé" (suite à un passage de la souris)
//alors il est dessiné en rouge.
g2.setColor(Color.red);
//Construction du JDialog.
popup = new JDialog();
Color color = new Color(243, 255, 159);
popup.getContentPane().setLayout(new FlowLayout());
popup.setUndecorated(true);
popup.getContentPane().setBackground(color);
JPanel jp = new JPanel(new GridLayout(6,0));
//Ajout des informations (déterminées avant) dans le JPanel.
jp.add(new JLabel("Domaine : " + dom));
jp.add(new JLabel("Appellation : " + appel));
jp.add(new JLabel("Millesime : " + an));
jp.add(new JLabel("Quantité : " + nb));
jp.add(new JLabel("Ligne : " + coordL));
jp.add(new JLabel("Colonne : " + coordC));
//Ajout de l'image dans le JDialog.
popup.getContentPane().add(new JLabel(_
new ImageIcon(getClass().getClassLoader().getResource("Pictures/Rosé.jpg"))));
//Ajout du JPanel dans le JDialog.
popup.getContentPane().add(jp);
popup.setFocusableWindowState(false);
popup.setSize(0, 0);
popup.setLocation(500, 500);
popup.pack();
popup.setVisible(true);
} else {
//gpBleu, couleur par défaut.
//gpRouge, gpRosé et gpBlanc, couleurs définies avant la boucle
g2.setPaint(gpBleu);
if (couleur.equals("Rouge")) {
g2.setPaint(gpRouge);
}
if (couleur.equals("Rose")) {
g2.setPaint(gpRosé);
}
if (couleur.equals("Blanc")) {
g2.setPaint(gpBlanc);
}
}
//On dessine le cercle i.
g2.fill(circles.get(i));
}
}
public void mouseMoved(MouseEvent e) {
int x = e.getX();
int y = e.getY();
for (int i=0; i<circles.size(); i++) {
if ((circles.get(i).contains(x, y)) && (!circles.get(i).isActivated())) {
//Si la souris est sur un cercle, et que ce cercle n'est pas encore activé
//alors il faut l'activer, et redessiner (il apparaitra en rouge).
circles.get(i).setActivated();
}
if ((circles.get(i).isActivated()) && (!circles.get(i).contains(x, y))) {
//Si un cercle est "activé" (suite à un passage de la souris)
//mais que la souris n'est plus dessus
//alors il faut le désactiver, et redessiner (il apparaitra en normal).
circles.get(i).setNotActivated();
}
}
repaint();
}
public void mouseDragged(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {
if (popup != null) {
popup.dispose();
popup.setVisible(false);
}
}
public void mouseClicked(MouseEvent e) {}
}
//Classe représentant un cercle.
class MyCircle extends Ellipse2D.Double {
//Epaisseur du cercle
final private static int lineWidth = 2;
//Booléean indiquant si le cercle est activé (suite au passage de la souris)
//dans ce cas, il se dessinera en rouge.
boolean activated = false;
boolean clicked = false;
boolean enabled = true;
int coordL = 0;
int coordC = 0;
public MyCircle(double x, double y, double w, double h) {
super(); //super = Ellipse.Double.
//Construction de l'ellipse.
this.setFrame(x, y, w, h);
}
public void setL(int i) {
this.coordL = i;
}
public void setC(int i) {
this.coordC = i;
}
public int getL() {
return this.coordL;
}
public int getC() {
return this.coordC;
}
public boolean isActivated() {
return this.activated;
}
public boolean isClicked() {
return this.clicked;
}
public boolean isEnabled() {
return this.enabled;
}
public void setActivated() {
this.activated = true;
}
public void setClicked() {
this.clicked = true;
}
public void setDisabled() {
this.enabled = false;
}
public void setNotActivated() {
this.activated = false;
}
public void setNotClicked() {
this.clicked = false;
}
} |
Partager