From 0d9fa0bdfebd6889fea27d9dc94008e9810b89ec Mon Sep 17 00:00:00 2001
From: NeggutsMc <negguts_mc@outlook.com>
Date: Thu, 18 Jan 2024 14:50:57 +0100
Subject: [PATCH] Update Panel.java

---
 panel_admin_sae/src/src/Panel.java | 328 ++++++++++-------------------
 1 file changed, 114 insertions(+), 214 deletions(-)

diff --git a/panel_admin_sae/src/src/Panel.java b/panel_admin_sae/src/src/Panel.java
index 7689278..9fd5225 100644
--- a/panel_admin_sae/src/src/Panel.java
+++ b/panel_admin_sae/src/src/Panel.java
@@ -22,8 +22,8 @@ public class Panel implements ActionListener {
     private Connection dbConnection;
     private JFrame frame;
     private JTabbedPane tabbedPane;
-    private JPanel competitionsPanel, resultsPanel; // Ajout de resultsPanel ici
-    private JTextField lieuField, horaireField, placesField;
+    private JPanel competitionsPanel;
+    private JTextField lieuField, horaireField, placesField, gagnantField, scoreField;
     private JButton addButton, deleteButton, updateButton, loginButton;
     private JTable competitionsTable;
     private DefaultTableModel competitionsTableModel;
@@ -31,23 +31,27 @@ public class Panel implements ActionListener {
     private JPasswordField passwordField;
     private boolean isLoggedIn = false;
 
-
-
     public Panel(Connection connection) {
         this.dbConnection = connection;
-
         frame = new JFrame("Panel");
-        frame.setSize(1280, 720); // Résolution HD
+
+        // Définir la taille de la fenêtre en plein écran
+        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
+        // Initialisation des champs de texte
+        lieuField = new JTextField(20);
+        horaireField = new JTextField(20);
+        placesField = new JTextField(20);
+        gagnantField = new JTextField(20);
+        scoreField = new JTextField(20);
+
         try {
             UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
         } catch (Exception e) {
             e.printStackTrace();
         }
 
-
-
         tabbedPane = new JTabbedPane();
 
         JPanel loginPanel = createLoginPanel();
@@ -55,15 +59,13 @@ public class Panel implements ActionListener {
 
         competitionsPanel = createCompetitionsPanel();
         tabbedPane.addTab("Gérer Compétitions", competitionsPanel);
-        tabbedPane.setEnabledAt(1, false);
-
-        resultsPanel = createResultsPanel();
-        tabbedPane.addTab("Gérer Scores", resultsPanel);
+        tabbedPane.setEnabledAt(1, false); // Désactive l'onglet au démarrage
 
         frame.add(tabbedPane);
         frame.setVisible(true);
     }
 
+
     private JPanel createLoginPanel() {
         JPanel panel = new JPanel(new GridBagLayout());
         panel.setBorder(BorderFactory.createEmptyBorder(50, 50, 50, 50));
@@ -148,11 +150,9 @@ public class Panel implements ActionListener {
     private JPanel createCompetitionsPanel() {
         JPanel panel = new JPanel(new BorderLayout());
 
-        // Créer un modèle de tableau avec une surcharge de isCellEditable
         competitionsTableModel = new DefaultTableModel() {
             @Override
             public boolean isCellEditable(int row, int column) {
-                // Rendre toutes les cellules non éditables
                 return false;
             }
         };
@@ -161,9 +161,10 @@ public class Panel implements ActionListener {
         competitionsTableModel.addColumn("Lieu");
         competitionsTableModel.addColumn("Horaire");
         competitionsTableModel.addColumn("Places Disponibles");
+        competitionsTableModel.addColumn("Gagnant");
+        competitionsTableModel.addColumn("Score");
 
         competitionsTable = new JTable(competitionsTableModel);
-
         TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(competitionsTableModel);
         competitionsTable.setRowSorter(sorter);
 
@@ -177,38 +178,40 @@ public class Panel implements ActionListener {
             public void valueChanged(ListSelectionEvent event) {
                 if (!event.getValueIsAdjusting() && competitionsTable.getSelectedRow() != -1) {
                     int selectedRow = competitionsTable.getSelectedRow();
-
                     if (selectedRow >= 0 && selectedRow < competitionsTableModel.getRowCount()) {
                         String lieu = (String) competitionsTableModel.getValueAt(selectedRow, 1);
                         String horaire = (String) competitionsTableModel.getValueAt(selectedRow, 2);
                         String places = String.valueOf(competitionsTableModel.getValueAt(selectedRow, 3));
+                        String gagnant = (String) competitionsTableModel.getValueAt(selectedRow, 4);
+                        String score = (String) competitionsTableModel.getValueAt(selectedRow, 5);
 
                         lieuField.setText(lieu);
                         horaireField.setText(horaire);
                         placesField.setText(places);
+                        gagnantField.setText(gagnant);
+                        scoreField.setText(score);
                     }
                 }
             }
         });
 
-        JPanel inputPanel = new JPanel(new GridLayout(4, 2, 10, 10));
+        // Panel pour l'entrée des données
+        JPanel inputPanel = new JPanel(new GridLayout(6, 2, 10, 10)); // Mise à jour pour 6 lignes
         inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
 
-        inputPanel.add(new JLabel("Lieu:"));
-        lieuField = new JTextField();
-        lieuField.setToolTipText("Entrez le lieu de la compétition");
+        // Ajout des champs de texte et des étiquettes au panel
+        inputPanel.add(new JLabel("Lieu :"));
         inputPanel.add(lieuField);
-
-        inputPanel.add(new JLabel("Horaire (yyyy-MM-dd HH:mm:ss):"));
-        horaireField = new JTextField();
-        horaireField.setToolTipText("Entrez l'horaire au format yyyy-MM-dd HH:mm:ss");
+        inputPanel.add(new JLabel("Horaire :"));
         inputPanel.add(horaireField);
-
-        inputPanel.add(new JLabel("Places Disponibles:"));
-        placesField = new JTextField();
-        placesField.setToolTipText("Entrez le nombre de places disponibles");
+        inputPanel.add(new JLabel("Places Disponibles :"));
         inputPanel.add(placesField);
+        inputPanel.add(new JLabel("Gagnant :"));
+        inputPanel.add(gagnantField);
+        inputPanel.add(new JLabel("Score :"));
+        inputPanel.add(scoreField);
 
+        // Boutons pour les actions
         addButton = new JButton("Ajouter");
         addButton.addActionListener(this);
         deleteButton = new JButton("Supprimer");
@@ -216,7 +219,7 @@ public class Panel implements ActionListener {
         updateButton = new JButton("Modifier");
         updateButton.addActionListener(this);
 
-        JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 0));
+        JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 0)); // Mise à jour pour 3 boutons
         buttonPanel.add(addButton);
         buttonPanel.add(deleteButton);
         buttonPanel.add(updateButton);
@@ -234,21 +237,31 @@ public class Panel implements ActionListener {
 
 
 
+
+
+
+
+
+
+
     private void loadCompetitionsData() {
         competitionsTableModel.setRowCount(0);
         try {
+            String query = "SELECT c.CompetitionID, c.Lieu, c.Horaire, c.PlacesDisponibles, r.Gagnant, r.Score FROM competitions c LEFT JOIN resultats r ON c.CompetitionID = r.CompetitionID";
             Statement stmt = dbConnection.createStatement();
-            ResultSet rs = stmt.executeQuery("SELECT * FROM competitions");
+            ResultSet rs = stmt.executeQuery(query);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+
             while (rs.next()) {
                 int competitionID = rs.getInt("CompetitionID");
                 String lieu = rs.getString("Lieu");
                 Timestamp horaire = rs.getTimestamp("Horaire");
                 int placesDisponibles = rs.getInt("PlacesDisponibles");
+                String gagnant = rs.getString("Gagnant");
+                String score = rs.getString("Score");
 
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                 String formattedDate = sdf.format(horaire);
-
-                competitionsTableModel.addRow(new Object[]{competitionID, lieu, formattedDate, placesDisponibles});
+                competitionsTableModel.addRow(new Object[]{competitionID, lieu, formattedDate, placesDisponibles, gagnant, score});
             }
         } catch (SQLException e) {
             e.printStackTrace();
@@ -257,6 +270,7 @@ public class Panel implements ActionListener {
     }
 
 
+
     @Override
     public void actionPerformed(ActionEvent e) {
         // Gestion de l'événement de clic sur le bouton de connexion
@@ -295,7 +309,9 @@ public class Panel implements ActionListener {
 
             if (rs.next()) {
                 isLoggedIn = true;
-                tabbedPane.setEnabledAt(1, true);
+                tabbedPane.setEnabledAt(1, true); // Active l'onglet "Gérer Compétitions"
+                // La ligne suivante a été supprimée car il n'y a plus de troisième onglet
+                // tabbedPane.setEnabledAt(2, true);
                 tabbedPane.setSelectedComponent(competitionsPanel);
                 loadCompetitionsData();
                 tabbedPane.remove(0);
@@ -307,6 +323,7 @@ public class Panel implements ActionListener {
         }
     }
 
+
     private void showAddCompetitionDialog() {
         JDialog addDialog = new JDialog(frame, "Ajouter une Compétition", true);
         addDialog.setLayout(new GridLayout(0, 2));
@@ -382,6 +399,58 @@ public class Panel implements ActionListener {
     }
 
 
+    private void showUpdateScoreDialog(int competitionID) {
+        JDialog updateDialog = new JDialog(frame, "Mettre à jour le Score", true);
+        updateDialog.setLayout(new GridLayout(0, 2));
+        updateDialog.setSize(400, 200);
+
+        JTextField gagnantField = new JTextField();
+        JTextField scoreField = new JTextField();
+
+        updateDialog.add(new JLabel("Gagnant:"));
+        updateDialog.add(gagnantField);
+        updateDialog.add(new JLabel("Score:"));
+        updateDialog.add(scoreField);
+
+        JButton submitButton = new JButton("Mettre à jour");
+        submitButton.addActionListener(new ActionListener() {
+            @Override
+            public void actionPerformed(ActionEvent e) {
+                String gagnant = gagnantField.getText().trim();
+                String score = scoreField.getText().trim();
+
+                if (gagnant.isEmpty() || score.isEmpty()) {
+                    JOptionPane.showMessageDialog(updateDialog, "Le gagnant et le score ne peuvent pas être vides.", "Erreur", JOptionPane.ERROR_MESSAGE);
+                    return;
+                }
+
+                try {
+                    PreparedStatement stmt = dbConnection.prepareStatement("UPDATE resultats SET Gagnant = ?, Score = ? WHERE CompetitionID = ?");
+                    stmt.setString(1, gagnant);
+                    stmt.setString(2, score);
+                    stmt.setInt(3, competitionID);
+
+                    int rowsAffected = stmt.executeUpdate();
+                    if (rowsAffected > 0) {
+                        JOptionPane.showMessageDialog(updateDialog, "Score mis à jour avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
+                        loadCompetitionsData();
+                    } else {
+                        JOptionPane.showMessageDialog(updateDialog, "Erreur lors de la mise à jour du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
+                    }
+
+                    updateDialog.dispose();
+                } catch (SQLException ex) {
+                    ex.printStackTrace();
+                    JOptionPane.showMessageDialog(updateDialog, "Erreur lors de l'accès à la base de données.", "Erreur", JOptionPane.ERROR_MESSAGE);
+                }
+            }
+        });
+
+        updateDialog.add(submitButton);
+        updateDialog.setVisible(true);
+    }
+
+
     private void deleteCompetition() {
         int selectedRow = competitionsTable.getSelectedRow();
         if (selectedRow != -1) {
@@ -411,27 +480,20 @@ public class Panel implements ActionListener {
         int selectedRow = competitionsTable.getSelectedRow();
         if (selectedRow != -1) {
             int competitionID = (int) competitionsTableModel.getValueAt(selectedRow, 0);
-            String lieu = lieuField.getText();
-            String horaireStr = horaireField.getText();
-            String placesStr = placesField.getText();
+            String gagnant = gagnantField.getText();
+            String score = scoreField.getText();
 
-            if (lieu.isEmpty() || horaireStr.isEmpty() || placesStr.isEmpty()) {
-                JOptionPane.showMessageDialog(frame, "Tous les champs doivent être remplis.", "Erreur", JOptionPane.ERROR_MESSAGE);
+            if (gagnant.isEmpty() || score.isEmpty()) {
+                JOptionPane.showMessageDialog(frame, "Le gagnant et le score ne peuvent pas être vides.", "Erreur", JOptionPane.ERROR_MESSAGE);
                 return;
             }
 
             try {
-                int placesDisponibles = Integer.parseInt(placesStr);
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                Date parsedDate = sdf.parse(horaireStr);
-                Timestamp horaire = new Timestamp(parsedDate.getTime());
-
-                PreparedStatement stmt = dbConnection.prepareStatement("UPDATE competitions SET Lieu = ?, Horaire = ?, PlacesDisponibles = ? WHERE CompetitionID = ?");
-                stmt.setString(1, lieu);
-                stmt.setTimestamp(2, horaire);
-                stmt.setInt(3, placesDisponibles);
-                stmt.setInt(4, competitionID);
-
+                // Mise à jour du gagnant et du score
+                PreparedStatement stmt = dbConnection.prepareStatement("UPDATE resultats SET Gagnant = ?, Score = ? WHERE CompetitionID = ?");
+                stmt.setString(1, gagnant);
+                stmt.setString(2, score);
+                stmt.setInt(3, competitionID);
                 int rowsAffected = stmt.executeUpdate();
 
                 if (rowsAffected > 0) {
@@ -440,8 +502,6 @@ public class Panel implements ActionListener {
                 } else {
                     JOptionPane.showMessageDialog(frame, "Erreur lors de la mise à jour de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE);
                 }
-            } catch (NumberFormatException | ParseException ex) {
-                JOptionPane.showMessageDialog(frame, "Format de date ou nombre de places invalide.", "Erreur", JOptionPane.ERROR_MESSAGE);
             } catch (SQLException ex) {
                 ex.printStackTrace();
                 JOptionPane.showMessageDialog(frame, "Erreur lors de l'accès à la base de données.", "Erreur", JOptionPane.ERROR_MESSAGE);
@@ -451,177 +511,17 @@ public class Panel implements ActionListener {
         }
     }
 
-    private JPanel createResultsPanel() {
-        JPanel panel = new JPanel();
-        panel.setLayout(new BorderLayout());
-
-        // Création du modèle de tableau
-        DefaultTableModel resultsTableModel = new DefaultTableModel();
-        resultsTableModel.addColumn("ResultatID");
-        resultsTableModel.addColumn("CompetitionID");
-        resultsTableModel.addColumn("Gagnant");
-        resultsTableModel.addColumn("Score");
-
-        // Création du JTable pour afficher les résultats
-        JTable resultsTable = new JTable(resultsTableModel);
-
-        // Chargement des données dans le tableau
-        loadResultsData(resultsTableModel);
-
-        // Ajout du tableau à un JScrollPane et ensuite au panel
-        JScrollPane scrollPane = new JScrollPane(resultsTable);
-        panel.add(scrollPane, BorderLayout.CENTER);
-
-        // Création du panneau pour les entrées utilisateur
-        JPanel inputPanel = new JPanel();
-        inputPanel.setLayout(new GridLayout(0, 2, 10, 10)); // Mise en page en grille
-        inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
-
-        // Ajout des champs de saisie et des étiquettes
-        inputPanel.add(new JLabel("ResultatID:"));
-        JTextField resultatIDField = new JTextField();
-        inputPanel.add(resultatIDField);
-
-        inputPanel.add(new JLabel("CompetitionID:"));
-        JTextField competitionIDField = new JTextField();
-        inputPanel.add(competitionIDField);
-
-        inputPanel.add(new JLabel("Gagnant:"));
-        JTextField gagnantField = new JTextField();
-        inputPanel.add(gagnantField);
-
-        inputPanel.add(new JLabel("Score:"));
-        JTextField scoreField = new JTextField();
-        inputPanel.add(scoreField);
-
-        // Ajout des boutons pour ajouter, supprimer, et mettre à jour
-        JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 0));
-        JButton addButton = new JButton("Ajouter");
-        JButton deleteButton = new JButton("Supprimer");
-        JButton updateButton = new JButton("Mettre à jour");
-
-        // Ajout des écouteurs d'événements pour les boutons
-        addButton.addActionListener(e -> addMatchScore(resultatIDField, competitionIDField, gagnantField, scoreField, resultsTableModel));
-        deleteButton.addActionListener(e -> deleteMatchScore(resultatIDField, resultsTableModel));
-        updateButton.addActionListener(e -> updateMatchScore(resultatIDField, competitionIDField, gagnantField, scoreField, resultsTableModel));
-
-        buttonPanel.add(addButton);
-        buttonPanel.add(deleteButton);
-        buttonPanel.add(updateButton);
-
-        // Ajout des panneaux d'entrée et des boutons au panneau principal
-        JPanel southPanel = new JPanel(new BorderLayout());
-        southPanel.add(inputPanel, BorderLayout.NORTH);
-        southPanel.add(buttonPanel, BorderLayout.SOUTH);
-
-        panel.add(southPanel, BorderLayout.SOUTH);
-
-        return panel;
-    }
-
-
-    private void loadResultsData(DefaultTableModel resultsTableModel) {
-        resultsTableModel.setRowCount(0); // Effacer les données existantes
-        try {
-            Statement stmt = dbConnection.createStatement();
-            ResultSet rs = stmt.executeQuery("SELECT * FROM resultats");
-            while (rs.next()) {
-                int resultatID = rs.getInt("ResultatID");
-                int competitionID = rs.getInt("CompetitionID");
-                String gagnant = rs.getString("Gagnant");
-                String score = rs.getString("Score");
-
-                resultsTableModel.addRow(new Object[]{resultatID, competitionID, gagnant, score});
-            }
-        } catch (SQLException e) {
-            e.printStackTrace();
-            JOptionPane.showMessageDialog(frame, "Erreur lors du chargement des données des résultats.", "Erreur", JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
 
-    private void addMatchScore(JTextField resultatIDField, JTextField competitionIDField, JTextField gagnantField, JTextField scoreField, DefaultTableModel resultsTableModel) {
-        try {
-            int resultatID = Integer.parseInt(resultatIDField.getText());
-            int competitionID = Integer.parseInt(competitionIDField.getText());
-            String gagnant = gagnantField.getText();
-            String score = scoreField.getText();
 
-            PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO resultats (ResultatID, CompetitionID, Gagnant, Score) VALUES (?, ?, ?, ?)");
-            stmt.setInt(1, resultatID);
-            stmt.setInt(2, competitionID);
-            stmt.setString(3, gagnant);
-            stmt.setString(4, score);
-
-            int rowsAffected = stmt.executeUpdate();
-            if (rowsAffected > 0) {
-                JOptionPane.showMessageDialog(frame, "Score ajouté avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
-                loadResultsData(resultsTableModel); // Recharger les données
-            } else {
-                JOptionPane.showMessageDialog(frame, "Erreur lors de l'ajout du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-            }
-        } catch (NumberFormatException | SQLException e) {
-            e.printStackTrace();
-            JOptionPane.showMessageDialog(frame, "Erreur lors de l'ajout du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-
-    private void deleteMatchScore(JTextField resultatIDField, DefaultTableModel resultsTableModel) {
-        try {
-            int resultatID = Integer.parseInt(resultatIDField.getText());
-
-            PreparedStatement stmt = dbConnection.prepareStatement("DELETE FROM resultats WHERE ResultatID = ?");
-            stmt.setInt(1, resultatID);
-
-            int rowsAffected = stmt.executeUpdate();
-            if (rowsAffected > 0) {
-                JOptionPane.showMessageDialog(frame, "Score supprimé avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
-                loadResultsData(resultsTableModel); // Recharger les données
-            } else {
-                JOptionPane.showMessageDialog(frame, "Erreur lors de la suppression du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-            }
-        } catch (NumberFormatException | SQLException e) {
-            e.printStackTrace();
-            JOptionPane.showMessageDialog(frame, "Erreur lors de la suppression du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-        }
-    }
-
-
-    private void updateMatchScore(JTextField resultatIDField, JTextField competitionIDField, JTextField gagnantField, JTextField scoreField, DefaultTableModel resultsTableModel) {
-        try {
-            int resultatID = Integer.parseInt(resultatIDField.getText());
-            int competitionID = Integer.parseInt(competitionIDField.getText());
-            String gagnant = gagnantField.getText();
-            String score = scoreField.getText();
-
-            PreparedStatement stmt = dbConnection.prepareStatement("UPDATE resultats SET CompetitionID = ?, Gagnant = ?, Score = ? WHERE ResultatID = ?");
-            stmt.setInt(1, competitionID);
-            stmt.setString(2, gagnant);
-            stmt.setString(3, score);
-            stmt.setInt(4, resultatID);
-
-            int rowsAffected = stmt.executeUpdate();
-            if (rowsAffected > 0) {
-                JOptionPane.showMessageDialog(frame, "Score mis à jour avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE);
-                loadResultsData(resultsTableModel); // Recharger les données
-            } else {
-                JOptionPane.showMessageDialog(frame, "Erreur lors de la mise à jour du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-            }
-        } catch (NumberFormatException | SQLException e) {
-            e.printStackTrace();
-            JOptionPane.showMessageDialog(frame, "Erreur lors de la mise à jour du score.", "Erreur", JOptionPane.ERROR_MESSAGE);
-        }
-    }
 
 
 
     public static void main(String[] args) {
         try {
-            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "root");
+            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "");
             new Panel(connection);
         } catch (SQLException e) {
             e.printStackTrace();
         }
     }
-}
\ No newline at end of file
+}
-- 
GitLab