2024-04-16 22:39:23 +02:00
|
|
|
import java.awt.*;
|
|
|
|
import javax.swing.*;
|
|
|
|
|
2024-04-17 21:42:55 +02:00
|
|
|
/**
|
2024-04-29 18:20:37 +02:00
|
|
|
* GMCase représente une case dans une grille éditable.
|
|
|
|
* Cette classe étend JPanel et utilise un GMCaseListener pour gérer les événements de touche.
|
2024-04-17 21:42:55 +02:00
|
|
|
* @version 1.0
|
|
|
|
* @author Moncef STITI
|
|
|
|
* @author Marco ORFAO
|
|
|
|
*/
|
2024-04-29 16:26:16 +02:00
|
|
|
public class GMCase extends JPanel {
|
2024-04-29 18:20:37 +02:00
|
|
|
/**
|
|
|
|
* Valeur actuelle de la case
|
|
|
|
*/
|
|
|
|
private int cellValue = 0;
|
|
|
|
/**
|
|
|
|
* Texte à afficher dans la case
|
2024-04-30 12:01:34 +02:00
|
|
|
*/
|
2024-04-29 18:20:37 +02:00
|
|
|
private String displayText = "";
|
|
|
|
/**
|
|
|
|
* Bouton pour afficher le texte
|
|
|
|
*/
|
|
|
|
private JButton actionButton = new JButton(displayText);
|
2024-04-30 12:01:34 +02:00
|
|
|
/**
|
|
|
|
* Statut de la case
|
|
|
|
*/
|
|
|
|
protected boolean isActive = false;
|
2024-04-16 22:39:23 +02:00
|
|
|
|
2024-04-30 12:51:21 +02:00
|
|
|
private int row;
|
|
|
|
private int col;
|
|
|
|
private GMGrid grille;
|
|
|
|
|
2024-04-17 21:42:55 +02:00
|
|
|
/**
|
2024-04-29 18:20:37 +02:00
|
|
|
* Constructeur par défaut de GMCase.
|
|
|
|
* Initialise le bouton avec les propriétés nécessaires, crée un GMCaseListener et l'ajoute au bouton.
|
2024-04-17 21:42:55 +02:00
|
|
|
*/
|
2024-04-30 12:51:21 +02:00
|
|
|
public GMCase(GMGrid grille, int row, int col) {
|
|
|
|
this.grille = grille;
|
|
|
|
this.row = row;
|
|
|
|
this.col = col;
|
|
|
|
|
2024-04-16 22:39:23 +02:00
|
|
|
actionButton.setOpaque(false);
|
|
|
|
actionButton.setContentAreaFilled(false);
|
|
|
|
actionButton.setBorderPainted(false);
|
|
|
|
actionButton.setPreferredSize(new Dimension(50, 50));
|
|
|
|
|
|
|
|
BorderLayout gestionnaire = new BorderLayout();
|
|
|
|
setLayout(gestionnaire);
|
|
|
|
add(actionButton, BorderLayout.CENTER);
|
|
|
|
|
|
|
|
setPreferredSize(new Dimension(60, 60));
|
|
|
|
|
2024-04-29 18:20:37 +02:00
|
|
|
// Crée un GMCaseListener et l'ajoute au bouton
|
2024-04-30 12:51:21 +02:00
|
|
|
GMCaseKeyListener listener = new GMCaseKeyListener(this,this.grille,this.row,this.col);
|
2024-04-29 13:01:40 +02:00
|
|
|
actionButton.addKeyListener(listener);
|
2024-04-30 12:01:34 +02:00
|
|
|
|
|
|
|
GMCaseMouseListener mouseListener = new GMCaseMouseListener();
|
|
|
|
actionButton.addMouseListener(mouseListener);
|
2024-04-16 22:39:23 +02:00
|
|
|
}
|
|
|
|
|
2024-04-17 21:42:55 +02:00
|
|
|
/**
|
|
|
|
* Met à jour l'affichage de la case avec la valeur actuelle.
|
|
|
|
*/
|
2024-04-16 22:39:23 +02:00
|
|
|
public void updateDisplay() {
|
|
|
|
actionButton.setText(displayText.isEmpty() ? "" : displayText);
|
|
|
|
revalidate();
|
|
|
|
repaint();
|
|
|
|
}
|
|
|
|
|
2024-04-17 21:42:55 +02:00
|
|
|
/**
|
|
|
|
* Définit la valeur de la case et met à jour son affichage.
|
|
|
|
* @param value La nouvelle valeur de la case.
|
|
|
|
*/
|
2024-04-16 22:39:23 +02:00
|
|
|
public void setCellValue(int value) {
|
|
|
|
this.cellValue = value;
|
|
|
|
this.displayText = (value == 0) ? "" : String.valueOf(value); // Mettre à jour avec une chaîne vide si la valeur est 0
|
|
|
|
updateDisplay();
|
|
|
|
}
|
|
|
|
|
2024-04-17 21:42:55 +02:00
|
|
|
/**
|
|
|
|
* Récupère la valeur actuelle de la case.
|
|
|
|
* @return La valeur actuelle de la case.
|
|
|
|
*/
|
2024-04-16 22:39:23 +02:00
|
|
|
public int getCellValue() {
|
|
|
|
return this.cellValue;
|
|
|
|
}
|
2024-04-30 12:01:34 +02:00
|
|
|
|
|
|
|
public void setActive(boolean active) {
|
|
|
|
this.isActive = active;
|
|
|
|
if (isActive) {
|
|
|
|
setBackground(Color.CYAN);
|
|
|
|
} else {
|
|
|
|
setBackground(Color.WHITE);
|
|
|
|
}
|
|
|
|
updateDisplay();
|
|
|
|
}
|
2024-04-16 22:39:23 +02:00
|
|
|
}
|