88 lines
3.9 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|