SAE21_2023/SaisieGrille.java
2024-04-06 20:23:50 +02:00

88 lines
3.9 KiB
Java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class SaisieGrille extends JPanel {
private static final int TAILLE_GRILLE = 3;
private static final int TAILLE_REGION = 3;
private static final int TAILLE_CELLULE = 50;
private int[][] grille;
private int[][] grilleInitiale; // Pour stocker la grille initiale
private int ligneSelectionnee = -1;
private int colonneSelectionnee = -1;
public SaisieGrille(int[][] grille) {
this.grille = grille;
// Copie de la grille initiale
this.grilleInitiale = new int[grille.length][grille[0].length];
for (int i = 0; i < grille.length; i++) {
for (int j = 0; j < grille[i].length; j++) {
this.grilleInitiale[i][j] = grille[i][j];
}
}
setPreferredSize(new Dimension(TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE));
setFocusable(true); // Permet au JPanel de recevoir les événements de souris
addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
int x = e.getX() / TAILLE_CELLULE;
int y = e.getY() / TAILLE_CELLULE;
if (x >= 0 && x < TAILLE_GRILLE * TAILLE_REGION && y >= 0 && y < TAILLE_GRILLE * TAILLE_REGION) {
ligneSelectionnee = y;
colonneSelectionnee = x;
System.out.println("Case sélectionnée : (" + ligneSelectionnee + ", " + colonneSelectionnee + ")");
if (grilleInitiale[ligneSelectionnee][colonneSelectionnee] == 0) { // Ne permet la modification que pour les cellules vides
String valeurStr = JOptionPane.showInputDialog(null, "Entrez la valeur pour la cellule sélectionnée :");
try {
int valeur = Integer.parseInt(valeurStr);
grille[ligneSelectionnee][colonneSelectionnee] = valeur;
repaint();
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, "Saisie invalide. Veuillez entrer un nombre.");
}
} else {
JOptionPane.showMessageDialog(null, "Vous ne pouvez pas modifier la valeur par défaut.");
}
}
}
});
}
public int[][] getGrilleInitiale() {
return grilleInitiale;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Dessiner les contours de la grille (en gras)
Graphics2D g2d = (Graphics2D) g;
Stroke ancienStroke = g2d.getStroke(); // Sauvegarder le style de ligne précédent
g2d.setStroke(new BasicStroke(4)); // Épaisseur de ligne de 4 pixels
for (int i = 0; i <= TAILLE_GRILLE * TAILLE_REGION; i++) {
if (i % TAILLE_REGION == 0) {
g2d.drawLine(0, i * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE, i * TAILLE_CELLULE);
g2d.drawLine(i * TAILLE_CELLULE, 0, i * TAILLE_CELLULE, TAILLE_GRILLE * TAILLE_REGION * TAILLE_CELLULE);
}
}
// Rétablir le style de ligne précédent
g2d.setStroke(ancienStroke);
// Dessiner les cellules de la grille
for (int i = 0; i < TAILLE_GRILLE * TAILLE_REGION; i++) {
for (int j = 0; j < TAILLE_GRILLE * TAILLE_REGION; j++) {
g.setColor(Color.BLACK);
g.drawRect(j * TAILLE_CELLULE, i * TAILLE_CELLULE, TAILLE_CELLULE, TAILLE_CELLULE);
int valeur = grille[i][j];
if (valeur != 0) {
g.drawString(String.valueOf(valeur), j * TAILLE_CELLULE + TAILLE_CELLULE / 2, i * TAILLE_CELLULE + TAILLE_CELLULE / 2);
}
}
}
}
}