From 8ac0415c080c9f9243067e4b4294489f9bf3f9a8 Mon Sep 17 00:00:00 2001 From: stiti Date: Mon, 29 Apr 2024 12:34:00 +0200 Subject: [PATCH] =?UTF-8?q?Am=C3=A9lioration=20MVC=20/=20Responsabilit?= =?UTF-8?q?=C3=A9=20unique=20partie=201?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/GridSolver/GSCase.java | 107 ++++++++---------------- src/GridSolver/GSCaseMouseListener.java | 39 +++++++++ 2 files changed, 72 insertions(+), 74 deletions(-) create mode 100644 src/GridSolver/GSCaseMouseListener.java diff --git a/src/GridSolver/GSCase.java b/src/GridSolver/GSCase.java index 6962c54..8c79633 100755 --- a/src/GridSolver/GSCase.java +++ b/src/GridSolver/GSCase.java @@ -1,51 +1,41 @@ -import java.awt.*; +import java.awt.Color; import javax.swing.JPanel; import javax.swing.JLabel; -import java.awt.event.MouseListener; -import java.awt.event.MouseEvent; -/** - * La classe GSCase représente une case individuelle dans une grille de Sudoku. - */ -public class GSCase extends JPanel implements MouseListener{ +public class GSCase extends JPanel { + private int primaryValue; + private int secondaryValue = 0; + private int tertiaryValue = 0; + private int quaternaryValue = 0; - private int primaryValue; // Valeur principale de la case - private int secondaryValue; // Deuxième valeur de la case (utilisée pour les cas spéciaux) - private int tertiaryValue; // Troisième valeur de la case (utilisée pour les cas spéciaux) - private int quaternaryValue; // Quatrième valeur de la case (utilisée pour les cas spéciaux) - private String text = ""; // Texte affiché dans la case - private Boolean isInitial = false; // Indique si la valeur de la case est initiale (fournie avec le puzzle) - private Boolean isActive; // Indique si la case est active (sélectionnée par l'utilisateur) - JLabel label = new JLabel(); // Composant pour afficher le texte dans la case - private byte digitCount = 0; // Compte le nombre de valeurs insérées dans la case - private int positionX; // Position X de la case dans la grille - private int positionY; // Position Y de la case dans la grille - private GSGrid parentGrid; // Référence à la grille parente + private String text = ""; + protected boolean isInitial = false; + protected boolean isActive; + private JLabel label = new JLabel(); + private byte digitCount = 0; + protected int positionX; + protected int positionY; + protected GSGrid parentGrid; + private GSCaseMouseListener mouseListener; // Instance de la classe qui gère les événements de souris - /** - * Constructeur de la classe GSCase. - * @param grid La grille parente à laquelle cette case appartient. - * @param x Position X de la case dans la grille. - * @param y Position Y de la case dans la grille. - */ - public GSCase(GSGrid grid, int x, int y) { - this.positionX = x; - this.positionY = y; - - this.primaryValue = 0; - this.secondaryValue = 0; - this.tertiaryValue = 0; - this.quaternaryValue = 0; - - this.setBackground(Color.white); - this.addMouseListener(this); - this.parentGrid = grid; - this.add(label); - deactivateCell(); - layoutSetup(); - } + public GSCase(GSGrid grid, int x, int y) { + this.positionX = x; + this.positionY = y; - /** + this.primaryValue = 0; + + this.setBackground(Color.white); + + this.parentGrid = grid; + this.add(label); + layoutSetup(); + + // Initialisation de l'écouteur de souris + this.mouseListener = new GSCaseMouseListener(this); + this.addMouseListener(this.mouseListener); + } + + /** * Configure l'apparence initiale de la case. */ public void layoutSetup() { @@ -82,36 +72,6 @@ public class GSCase extends JPanel implements MouseListener{ return this.primaryValue; } - /** - * Gère les actions de clic de souris sur la case. - */ - public void mouseClicked(MouseEvent e) { - if (!this.isInitial) { - this.isActive = true; - this.setBackground(Color.GREEN); - this.parentGrid.testActivity(this.positionX, this.positionY); - } - } - - // D'autres méthodes de l'interface MouseListener - public void mousePressed(MouseEvent e) {} - public void mouseReleased(MouseEvent e) {} - public void mouseEntered(MouseEvent e) { - if (!isInitial) { - if (!isActive) { - this.setBackground(Color.yellow); - } - } - } - - public void mouseExited(MouseEvent e) { - if (!isInitial) { - if (!isActive) { - this.setBackground(Color.white); - } - } - } - /** * Désactive la case. */ @@ -197,5 +157,4 @@ public class GSCase extends JPanel implements MouseListener{ this.text = String.valueOf(this.primaryValue); layoutSetup(); } - -} +} \ No newline at end of file diff --git a/src/GridSolver/GSCaseMouseListener.java b/src/GridSolver/GSCaseMouseListener.java new file mode 100644 index 0000000..8afa46a --- /dev/null +++ b/src/GridSolver/GSCaseMouseListener.java @@ -0,0 +1,39 @@ +import java.awt.Color; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; + +public class GSCaseMouseListener implements MouseListener { + private GSCase casePanel; + + public GSCaseMouseListener(GSCase casePanel) { + this.casePanel = casePanel; + } + + public void mouseClicked(MouseEvent e) { + if (!casePanel.isInitial) { + casePanel.isActive = true; + casePanel.setBackground(Color.GREEN); + casePanel.parentGrid.testActivity(casePanel.positionX, casePanel.positionY); + } + } + + public void mousePressed(MouseEvent e) {} + + public void mouseReleased(MouseEvent e) {} + + public void mouseEntered(MouseEvent e) { + if (!casePanel.isInitial) { + if (!casePanel.isActive) { + casePanel.setBackground(Color.yellow); + } + } + } + + public void mouseExited(MouseEvent e) { + if (!casePanel.isInitial) { + if (!casePanel.isActive) { + casePanel.setBackground(Color.white); + } + } + } +}