2024-05-05 14:24:02 +02:00

82 lines
3.0 KiB
Java

/*
La classe <code>SaveButton</code> est utilisée pour la sauvegarde de la grille au format .gri à l'aide d'un bouton.
@version 1.1
@author Thomas Follea, Yann Keraudren
*/
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
public class SaveButton implements ActionListener {
private int GRID_SIZE;
private JTextField[][] grid;
public SaveButton(int GRID_SIZE, JTextField[][] grid) {
this.GRID_SIZE = GRID_SIZE;
this.grid = grid;
}
@Override
// Lorsque l'utilisateur appuie sur le bouton, il exécute l'action saveFichier();
public void actionPerformed(ActionEvent e) {
saveFichier();
}
private void saveFichier() {
try {
//Ouvre le fichier de sauvegarde
FileOutputStream fr = new FileOutputStream("GrilleNum1.gri");
DataOutputStream fichier = new DataOutputStream(fr);
JTextField[][] texte = grid;
// Parcour la grille
for (int i = 0; i < GRID_SIZE; i++) {
StringBuilder build = new StringBuilder();
for (int j = 0; j < GRID_SIZE; j++) {
String value = texte[i][j].getText();
// Vérifier si la case contient plus d'un chiffre
if (value.length() > 1) {
// Afficher un message d'erreur et arrêter la sauvegarde
JOptionPane.showMessageDialog(null, "Une case comporte plus d'un chiffre. Veuillez corriger avant de sauvegarder.", "Erreur", JOptionPane.ERROR_MESSAGE);
try {
fichier.close();
} catch (IOException e) {
System.err.println("Erreur de fermeture");
}
return; // Arrêter la sauvegarde si une case comporte plus d'un chiffre
}
// Si la case est vide, ajouter "0" à la chaine de caractères à sauvegarder
if (value.isEmpty()) {
build.append("0");
} else {
build.append(value);
}
}
// Convertir la chaine de caractères en entier et écrire dans le fichier
String convert = build.toString();
int write = Integer.parseInt(convert);
fichier.writeInt(write);
}
// Fermer le fichier après la sauvegarde
try {
fichier.close();
} catch (IOException e) {
System.err.println("Erreur de fermeture");
}
// Affiche un message de succès
JOptionPane.showMessageDialog(null, "Grille sauvegardée avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
} catch (IOException e) {
// Affiche un message d'erreur
JOptionPane.showMessageDialog(null, "Erreur lors de la sauvegarde de la grille.", "Erreur", JOptionPane.ERROR_MESSAGE);
e.printStackTrace();
}
}
}