From 19bfa89148c2f47ac45d5219bfea1e3c98fdc85a Mon Sep 17 00:00:00 2001 From: stiti Date: Tue, 30 Apr 2024 12:01:34 +0200 Subject: [PATCH] Ajout d'un MouseListener pour changer le background des cases --- src/GMCase.java | 21 +++++++++++-- ...seListener.java => GMCaseKeyListener.java} | 6 ++-- src/GMCaseMouseListener.java | 30 +++++++++++++++++++ src/GMGrid.java | 1 + 4 files changed, 53 insertions(+), 5 deletions(-) rename src/{GMCaseListener.java => GMCaseKeyListener.java} (87%) create mode 100644 src/GMCaseMouseListener.java diff --git a/src/GMCase.java b/src/GMCase.java index 9814bc3..4b004f4 100755 --- a/src/GMCase.java +++ b/src/GMCase.java @@ -15,12 +15,16 @@ public class GMCase extends JPanel { private int cellValue = 0; /** * Texte à afficher dans la case - * */ + */ private String displayText = ""; /** * Bouton pour afficher le texte */ private JButton actionButton = new JButton(displayText); + /** + * Statut de la case + */ + protected boolean isActive = false; /** * Constructeur par défaut de GMCase. @@ -39,8 +43,11 @@ public class GMCase extends JPanel { setPreferredSize(new Dimension(60, 60)); // Crée un GMCaseListener et l'ajoute au bouton - GMCaseListener listener = new GMCaseListener(this); + GMCaseKeyListener listener = new GMCaseKeyListener(this); actionButton.addKeyListener(listener); + + GMCaseMouseListener mouseListener = new GMCaseMouseListener(); + actionButton.addMouseListener(mouseListener); } /** @@ -69,4 +76,14 @@ public class GMCase extends JPanel { public int getCellValue() { return this.cellValue; } + + public void setActive(boolean active) { + this.isActive = active; + if (isActive) { + setBackground(Color.CYAN); + } else { + setBackground(Color.WHITE); + } + updateDisplay(); + } } diff --git a/src/GMCaseListener.java b/src/GMCaseKeyListener.java similarity index 87% rename from src/GMCaseListener.java rename to src/GMCaseKeyListener.java index 97f4210..e9a19bd 100644 --- a/src/GMCaseListener.java +++ b/src/GMCaseKeyListener.java @@ -2,12 +2,12 @@ import java.awt.event.KeyEvent; import java.awt.event.KeyListener; /** - * GridMakerCaseListener est un KeyListener utilisé pour écouter les événements de touche dans GridMakerCase. + * GMCaseKeyListener est un KeyListener utilisé pour écouter les événements de touche dans GridMakerCase. * @version 1.0 * @author Moncef STITI * @author Marco ORFAO */ -public class GMCaseListener implements KeyListener { +public class GMCaseKeyListener implements KeyListener { private GMCase gridMakerCase; @@ -15,7 +15,7 @@ public class GMCaseListener implements KeyListener { * Constructeur de GridMakerCaseListener. * @param gridMakerCase La case à écouter. */ - public GMCaseListener(GMCase gridMakerCase) { + public GMCaseKeyListener(GMCase gridMakerCase) { this.gridMakerCase = gridMakerCase; } diff --git a/src/GMCaseMouseListener.java b/src/GMCaseMouseListener.java new file mode 100644 index 0000000..c3567f0 --- /dev/null +++ b/src/GMCaseMouseListener.java @@ -0,0 +1,30 @@ +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.*; +import javax.swing.*; + +public class GMCaseMouseListener extends MouseAdapter { + // Variable statique pour stocker la dernière case activée + private static GMCase lastActiveCase; + + @Override + public void mouseClicked(MouseEvent e) { + super.mouseClicked(e); + // Vérifie si la source de l'événement est un JButton + if (e.getSource() instanceof JButton) { + JButton button = (JButton) e.getSource(); + // Vérifie si le bouton est contenu dans une instance de GMCase + if (button.getParent() instanceof GMCase) { + GMCase gmCase = (GMCase) button.getParent(); + // Si la dernière case activée est différente de la case actuelle + if (lastActiveCase != null && lastActiveCase != gmCase) { + lastActiveCase.setActive(false); // Désactiver la dernière case activée + } + // Activer la case actuelle + gmCase.setActive(true); + // Mettre à jour la référence de la dernière case activée + lastActiveCase = gmCase; + } + } + } +} diff --git a/src/GMGrid.java b/src/GMGrid.java index 2d3b16a..498e0f7 100755 --- a/src/GMGrid.java +++ b/src/GMGrid.java @@ -54,6 +54,7 @@ public class GMGrid extends JPanel { gridCases[i][j] = new GMCase(); zones[zoneRow][zoneCol].add(gridCases[i][j]); gridCases[i][j].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures + gridCases[i][j].setBackground(Color.WHITE); } } }