2024-04-28 01:40:14 +02:00
|
|
|
import javax.swing.*;
|
|
|
|
import java.awt.*;
|
|
|
|
|
2024-05-05 00:41:39 +02:00
|
|
|
/**
|
|
|
|
* La classe abstraite SudokuUI est une interface graphique pour afficher et interagir avec une grille de Sudoku.
|
|
|
|
* Elle fournit les méthodes de base pour la création de l'interface utilisateur.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
public abstract class SudokuUI extends JFrame {
|
2024-05-05 00:41:39 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* La grille de Sudoku associée à l'interface utilisateur.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
protected Sudoku sudoku;
|
2024-05-05 00:41:39 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Tableau bidimensionnel de boutons représentant les cellules de la grille de Sudoku.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
protected JButton[][] buttons;
|
2024-04-28 01:40:14 +02:00
|
|
|
|
2024-05-05 00:41:39 +02:00
|
|
|
/**
|
|
|
|
* Constructeur de la classe SudokuUI.
|
|
|
|
* @param sudoku La grille de Sudoku à afficher et à interagir.
|
|
|
|
*/
|
2024-05-04 00:13:44 +02:00
|
|
|
public SudokuUI(Sudoku sudoku) {
|
|
|
|
this.sudoku = sudoku;
|
2024-04-28 01:40:14 +02:00
|
|
|
this.buttons = new JButton[9][9];
|
|
|
|
|
2024-05-04 17:56:30 +02:00
|
|
|
setTitle(getTitleText());
|
2024-04-28 01:40:14 +02:00
|
|
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
|
|
|
JPanel gridPanel = new JPanel(new GridLayout(9, 9));
|
|
|
|
gridPanel.setBackground(Color.WHITE);
|
|
|
|
gridPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
|
|
|
|
|
2024-05-04 00:13:44 +02:00
|
|
|
// Création des boutons de la grille
|
2024-04-28 01:40:14 +02:00
|
|
|
createGridButtons(gridPanel);
|
|
|
|
|
2024-05-04 00:13:44 +02:00
|
|
|
// Calcul de la taille préférée de la fenêtre en fonction de la taille de la grille
|
2024-04-28 01:40:14 +02:00
|
|
|
int preferredSize = 50 * 9; // 50 est la taille approximative d'un bouton
|
|
|
|
gridPanel.setPreferredSize(new Dimension(preferredSize, preferredSize));
|
|
|
|
|
|
|
|
add(gridPanel);
|
2024-05-04 00:13:44 +02:00
|
|
|
pack(); // Redimensionne automatiquement la fenêtre pour s'adapter à la taille du panneau
|
2024-04-28 01:40:14 +02:00
|
|
|
setLocationRelativeTo(null);
|
|
|
|
setVisible(true);
|
|
|
|
}
|
|
|
|
|
2024-05-05 00:41:39 +02:00
|
|
|
/**
|
|
|
|
* Méthode abstraite permettant d'obtenir le texte du titre de l'interface utilisateur.
|
|
|
|
* @return Le texte du titre.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
protected abstract String getTitleText();
|
|
|
|
|
2024-05-05 00:41:39 +02:00
|
|
|
/**
|
|
|
|
* Méthode pour créer les boutons de la grille de Sudoku.
|
|
|
|
* @param gridPanel Le panneau de la grille où les boutons seront ajoutés.
|
|
|
|
*/
|
2024-05-04 17:56:30 +02:00
|
|
|
protected void createGridButtons(JPanel gridPanel) {
|
2024-05-04 00:13:44 +02:00
|
|
|
Grid grid = sudoku.getGrid(); // Obtenez la grille à partir de Sudoku
|
2024-04-28 01:40:14 +02:00
|
|
|
for (int row = 0; row < 9; row++) {
|
|
|
|
for (int col = 0; col < 9; col++) {
|
|
|
|
JButton button = new JButton();
|
|
|
|
button.setFont(new Font("Arial", Font.BOLD, 24));
|
|
|
|
button.setContentAreaFilled(false);
|
|
|
|
button.setBorder(BorderFactory.createLineBorder(Color.BLACK));
|
2024-05-04 17:56:30 +02:00
|
|
|
button.setMinimumSize(new Dimension(50, 50)); // Taille minimale des boutons
|
|
|
|
|
|
|
|
// Ajout de bordures plus épaisses pour délimiter les carrés de 3x3
|
|
|
|
if ((row + 1) % 3 == 0 && (col + 1) % 3 == 0) {
|
|
|
|
button.setBorder(BorderFactory.createMatteBorder(1, 1, 3, 3, Color.BLACK));
|
|
|
|
} else if ((row + 1) % 3 == 0) {
|
|
|
|
button.setBorder(BorderFactory.createMatteBorder(1, 1, 3, 1, Color.BLACK));
|
|
|
|
} else if ((col + 1) % 3 == 0) {
|
|
|
|
button.setBorder(BorderFactory.createMatteBorder(1, 1, 1, 3, Color.BLACK));
|
|
|
|
}
|
|
|
|
|
2024-05-04 00:13:44 +02:00
|
|
|
button.addActionListener(new SudokuButtonListener(row, col, sudoku, buttons));
|
2024-04-28 01:40:14 +02:00
|
|
|
gridPanel.add(button);
|
|
|
|
buttons[row][col] = button;
|
2024-05-04 17:56:30 +02:00
|
|
|
|
2024-04-28 01:40:14 +02:00
|
|
|
// Mettez à jour le texte des boutons avec les valeurs de la grille Sudoku
|
|
|
|
int value = grid.getCell(row, col).getValue();
|
|
|
|
buttons[row][col].setText(value == 0 ? "" : String.valueOf(value));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2024-05-05 13:38:52 +02:00
|
|
|
}
|
|
|
|
|