SAE21_2022/src/HomeView.java
2023-04-28 19:14:59 +02:00

125 lines
5.5 KiB
Java

import javax.swing.*;
import java.awt.*;
import java.io.File;
public class HomeView extends JPanel {
private Window window;
public HomeView(Window window) {
this.window = window;
JLabel texte = getTitre();
//Récupération des boutons créés dans la classe Boutons
JButton choisirGrille = choisirGrille();
JButton importerGrille = importerGrille();
// Création du panel pour le texte
JPanel panelTexte = new JPanel(new FlowLayout(FlowLayout.CENTER, 0, 0));
panelTexte.add(texte);
panelTexte.setOpaque(false);
// Création du panel pour les boutons
JPanel panelBoutons = new JPanel(new FlowLayout(FlowLayout.CENTER, 100, 200));
panelBoutons.add(choisirGrille);
panelBoutons.add(importerGrille);
panelBoutons.setOpaque(false);
// Ajout des composants au JPanel principal
setLayout(new BorderLayout());
add(panelTexte, BorderLayout.NORTH);
add(panelBoutons, BorderLayout.CENTER);
}
private static JLabel getTitre() {
JLabel texte = new JLabel("Choisissez votre type de grille", SwingConstants.CENTER);
texte.setPreferredSize(new Dimension(800, 50));
texte.setFont(new Font("Arial", Font.BOLD, 30));
texte.setForeground(new Color(0, 200, 10));
return texte;
}
private Button choisirGrille() {
JPanel panel = new JPanel();
Button choisirGrille = new Button("Générer une grille", new Dimension(250, 50));
choisirGrille.addActionListener(e -> {
String strTaille = JOptionPane.showInputDialog(panel, "Entrez la taille de la grille :", "Taille de la grille", JOptionPane.PLAIN_MESSAGE);
if (strTaille != null && !strTaille.isEmpty()) {
if (!Character.isDigit(strTaille.charAt(0))) {
JOptionPane.showMessageDialog(panel, "Le premier caractère doit être un chiffre ou nombre.", "Erreur", JOptionPane.ERROR_MESSAGE);
return;
}
try {
int taille = Integer.parseInt(strTaille);
if (taille > 3 && taille < 21) {
String[] options = {"Remplir aléatoirement", "Partir d'une grille vide"};
int choix = JOptionPane.showOptionDialog(panel, "Choisissez comment remplir la grille :", "Remplissage de la grille", JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
EditorView editorView = new EditorView(window);
EditorController editorController = new EditorController(new Editor(new Grid(taille)), editorView);
switch (choix) {
case 0:
// afficher la grille aléatoirement
editorController.random();
window.setContentPane(editorView);
window.validate();
break;
case 1:
window.setContentPane(editorView);
window.validate();
break;
default:
// gérer le cas où aucun choix n'a été fait
JOptionPane.showMessageDialog(panel, "Aucun choix n'a été fait.", "Attention", JOptionPane.WARNING_MESSAGE);
return;
}
} else {
String errorMessage = "La taille doit être au moins de 4.";
if (taille >= 21) {
errorMessage = "La taille ne doit pas dépasser 20.";
}
JOptionPane.showMessageDialog(panel, errorMessage, "Erreur", JOptionPane.ERROR_MESSAGE);
}
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(panel, "Tapez " + strTaille.charAt(0) + " pour une grille " + strTaille.charAt(0) +"x"+ strTaille.charAt(0) +".", "Erreur", JOptionPane.ERROR_MESSAGE);
}
}
});
return choisirGrille;
}
private Button importerGrille() {
JPanel panel = new JPanel();
Button importerGrille = new Button("Importer une grille", new Dimension(250, 50));
importerGrille.addActionListener(e -> {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setDialogTitle("Selectionnez le fichier ou se trouve votre grille");
int choix = fileChooser.showOpenDialog(panel);
if (choix == JFileChooser.APPROVE_OPTION) {
File fichier = fileChooser.getSelectedFile();
try {
EditorView editorView = new EditorView(window);
new EditorController(new Editor(FileManager.importGrid(fichier)), editorView);
window.setContentPane(editorView);
window.validate();
} catch (Exception ex) {
JOptionPane.showMessageDialog(panel, ex.getMessage(), "Erreur", JOptionPane.ERROR_MESSAGE);
}
}
});
return importerGrille;
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(new ImageIcon("./resources/img/background.jpg").getImage(), 0, 0, getWidth(), getHeight(), null);
}
}