Ajout d'un MouseListener pour changer le background des cases

This commit is contained in:
stiti 2024-04-30 12:01:34 +02:00
parent a97db16dd2
commit 19bfa89148
4 changed files with 53 additions and 5 deletions

View File

@ -15,12 +15,16 @@ public class GMCase extends JPanel {
private int cellValue = 0; private int cellValue = 0;
/** /**
* Texte à afficher dans la case * Texte à afficher dans la case
* */ */
private String displayText = ""; private String displayText = "";
/** /**
* Bouton pour afficher le texte * Bouton pour afficher le texte
*/ */
private JButton actionButton = new JButton(displayText); private JButton actionButton = new JButton(displayText);
/**
* Statut de la case
*/
protected boolean isActive = false;
/** /**
* Constructeur par défaut de GMCase. * Constructeur par défaut de GMCase.
@ -39,8 +43,11 @@ public class GMCase extends JPanel {
setPreferredSize(new Dimension(60, 60)); setPreferredSize(new Dimension(60, 60));
// Crée un GMCaseListener et l'ajoute au bouton // Crée un GMCaseListener et l'ajoute au bouton
GMCaseListener listener = new GMCaseListener(this); GMCaseKeyListener listener = new GMCaseKeyListener(this);
actionButton.addKeyListener(listener); actionButton.addKeyListener(listener);
GMCaseMouseListener mouseListener = new GMCaseMouseListener();
actionButton.addMouseListener(mouseListener);
} }
/** /**
@ -69,4 +76,14 @@ public class GMCase extends JPanel {
public int getCellValue() { public int getCellValue() {
return this.cellValue; return this.cellValue;
} }
public void setActive(boolean active) {
this.isActive = active;
if (isActive) {
setBackground(Color.CYAN);
} else {
setBackground(Color.WHITE);
}
updateDisplay();
}
} }

View File

@ -2,12 +2,12 @@ import java.awt.event.KeyEvent;
import java.awt.event.KeyListener; 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 * @version 1.0
* @author Moncef STITI * @author Moncef STITI
* @author Marco ORFAO * @author Marco ORFAO
*/ */
public class GMCaseListener implements KeyListener { public class GMCaseKeyListener implements KeyListener {
private GMCase gridMakerCase; private GMCase gridMakerCase;
@ -15,7 +15,7 @@ public class GMCaseListener implements KeyListener {
* Constructeur de GridMakerCaseListener. * Constructeur de GridMakerCaseListener.
* @param gridMakerCase La case à écouter. * @param gridMakerCase La case à écouter.
*/ */
public GMCaseListener(GMCase gridMakerCase) { public GMCaseKeyListener(GMCase gridMakerCase) {
this.gridMakerCase = gridMakerCase; this.gridMakerCase = gridMakerCase;
} }

View File

@ -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;
}
}
}
}

View File

@ -54,6 +54,7 @@ public class GMGrid extends JPanel {
gridCases[i][j] = new GMCase(); gridCases[i][j] = new GMCase();
zones[zoneRow][zoneCol].add(gridCases[i][j]); 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].setBorder(determineBorder(i, j)); // Utilisation de la fonction pour définir les bordures
gridCases[i][j].setBackground(Color.WHITE);
} }
} }
} }