diff --git a/panel_admin_sae/logo.png b/panel_admin_sae/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d631bc9f3c33c9b3e3cc4b8832a5fbb98904a956 Binary files /dev/null and b/panel_admin_sae/logo.png differ diff --git a/panel_admin_sae/src/logo.png b/panel_admin_sae/src/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d631bc9f3c33c9b3e3cc4b8832a5fbb98904a956 Binary files /dev/null and b/panel_admin_sae/src/logo.png differ diff --git a/panel_admin_sae/src/src/Panel.java b/panel_admin_sae/src/src/Panel.java index 21e2e75f1a421d9ece1ff1fe6a3c2bdf2ac9fcf7..079f9e0be7fa3eefa2d8dc4b48c716aee72172a6 100644 --- a/panel_admin_sae/src/src/Panel.java +++ b/panel_admin_sae/src/src/Panel.java @@ -1,11 +1,17 @@ package src; +import javax.imageio.ImageIO; import javax.swing.*; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableRowSorter; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.sql.*; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -13,11 +19,10 @@ import java.util.Comparator; import java.util.Date; public class Panel implements ActionListener { - private Connection dbConnection; private JFrame frame; private JTabbedPane tabbedPane; - private JPanel competitionsPanel; + private JPanel competitionsPanel, resultsPanel; // Ajout de resultsPanel ici private JTextField lieuField, horaireField, placesField; private JButton addButton, deleteButton, updateButton, loginButton; private JTable competitionsTable; @@ -26,11 +31,13 @@ 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(800, 600); + frame.setSize(1280, 720); // Résolution HD frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { @@ -39,17 +46,20 @@ public class Panel implements ActionListener { e.printStackTrace(); } + + tabbedPane = new JTabbedPane(); - // Add the login panel JPanel loginPanel = createLoginPanel(); tabbedPane.addTab("Login", loginPanel); - // Add the competitions panel but set it as disabled initially competitionsPanel = createCompetitionsPanel(); tabbedPane.addTab("Gérer Compétitions", competitionsPanel); tabbedPane.setEnabledAt(1, false); + resultsPanel = createResultsPanel(); + tabbedPane.addTab("Gérer Scores", resultsPanel); + frame.add(tabbedPane); frame.setVisible(true); } @@ -62,16 +72,37 @@ public class Panel implements ActionListener { gbc.insets = new Insets(15, 15, 15, 15); gbc.fill = GridBagConstraints.HORIZONTAL; + // Chargement et ajout du logo redimensionné + try { + BufferedImage logoImage = ImageIO.read(new File("logo.png")); + + // Redimensionner le logo + int newWidth = 100; // Largeur souhaitée + int newHeight = 100; // Hauteur souhaitée + Image resizedImage = logoImage.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH); + ImageIcon logoIcon = new ImageIcon(resizedImage); + + JLabel logoLabel = new JLabel(logoIcon); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.gridwidth = 2; + panel.add(logoLabel, gbc); + gbc.gridy = 1; // Incrémentation de la position Y pour le titre + } catch (IOException e) { + e.printStackTrace(); + } + + // Ajout du titre JLabel titleLabel = new JLabel("Connexion"); titleLabel.setFont(new Font("Arial", Font.BOLD, 36)); gbc.gridx = 0; - gbc.gridy = 0; gbc.gridwidth = 2; panel.add(titleLabel, gbc); + // Ajout du label et champ pour le nom d'utilisateur JLabel usernameLabel = new JLabel("Nom d'utilisateur:"); usernameLabel.setFont(new Font("Arial", Font.PLAIN, 20)); - gbc.gridy = 1; + gbc.gridy = 2; gbc.gridwidth = 1; panel.add(usernameLabel, gbc); @@ -80,10 +111,11 @@ public class Panel implements ActionListener { gbc.gridx = 1; panel.add(loginField, gbc); + // Ajout du label et champ pour le mot de passe JLabel passwordLabel = new JLabel("Mot de passe:"); passwordLabel.setFont(new Font("Arial", Font.PLAIN, 20)); gbc.gridx = 0; - gbc.gridy = 2; + gbc.gridy = 3; panel.add(passwordLabel, gbc); passwordField = new JPasswordField(25); @@ -91,14 +123,16 @@ public class Panel implements ActionListener { gbc.gridx = 1; panel.add(passwordField, gbc); + // Ajout du bouton de connexion loginButton = new JButton("Connexion"); loginButton.setFont(new Font("Arial", Font.BOLD, 20)); loginButton.addActionListener(this); gbc.gridx = 0; - gbc.gridy = 3; + gbc.gridy = 4; gbc.gridwidth = 2; panel.add(loginButton, gbc); + // Action lors de l'appui sur 'Entrée' dans le champ du mot de passe passwordField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -109,49 +143,80 @@ public class Panel implements ActionListener { return panel; } + + private JPanel createCompetitionsPanel() { JPanel panel = new JPanel(new BorderLayout()); - competitionsTableModel = new DefaultTableModel(); + // 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; + } + }; + competitionsTableModel.addColumn("ID"); competitionsTableModel.addColumn("Lieu"); competitionsTableModel.addColumn("Horaire"); competitionsTableModel.addColumn("Places Disponibles"); + competitionsTable = new JTable(competitionsTableModel); TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<>(competitionsTableModel); competitionsTable.setRowSorter(sorter); - sorter.setComparator(0, Comparator.<Object, Integer>comparing(o -> (Integer) o)); - sorter.setComparator(3, Comparator.<Object, Integer>comparing(o -> (Integer) o)); + sorter.setComparator(0, Comparator.comparingInt(o -> (Integer) o)); + sorter.setComparator(3, Comparator.comparingInt(o -> (Integer) o)); JScrollPane scrollPane = new JScrollPane(competitionsTable); panel.add(scrollPane, BorderLayout.CENTER); - JPanel inputPanel = new JPanel(new GridLayout(4, 2, 10, 10)); // Ajout de l'espacement entre les composants - inputPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10)); // Ajout de marges + competitionsTable.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + 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)); + + lieuField.setText(lieu); + horaireField.setText(horaire); + placesField.setText(places); + } + } + } + }); + + JPanel inputPanel = new JPanel(new GridLayout(4, 2, 10, 10)); + 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"); 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(horaireField); inputPanel.add(new JLabel("Places Disponibles:")); placesField = new JTextField(); + placesField.setToolTipText("Entrez le nombre de places disponibles"); inputPanel.add(placesField); addButton = new JButton("Ajouter"); - deleteButton = new JButton("Supprimer"); - updateButton = new JButton("Modifier"); - addButton.addActionListener(this); + deleteButton = new JButton("Supprimer"); deleteButton.addActionListener(this); + updateButton = new JButton("Modifier"); updateButton.addActionListener(this); - JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 0)); // Ajout de l'espacement entre les boutons + JPanel buttonPanel = new JPanel(new GridLayout(1, 3, 10, 0)); buttonPanel.add(addButton); buttonPanel.add(deleteButton); buttonPanel.add(updateButton); @@ -167,6 +232,8 @@ public class Panel implements ActionListener { return panel; } + + private void loadCompetitionsData() { competitionsTableModel.setRowCount(0); try { @@ -185,22 +252,35 @@ public class Panel implements ActionListener { } } catch (SQLException e) { e.printStackTrace(); + JOptionPane.showMessageDialog(frame, "Erreur lors du chargement des données.", "Erreur", JOptionPane.ERROR_MESSAGE); } } + @Override public void actionPerformed(ActionEvent e) { + // Gestion de l'événement de clic sur le bouton de connexion if (e.getSource() == loginButton) { authenticateUser(); - } else if (e.getSource() == addButton && isLoggedIn) { - addCompetition(); - } else if (e.getSource() == deleteButton && isLoggedIn) { - deleteCompetition(); - } else if (e.getSource() == updateButton && isLoggedIn) { - updateCompetition(); + } + + // Gestion de l'événement de clic sur le bouton "Ajouter" + else if (e.getSource() == addButton && isLoggedIn) { + showAddCompetitionDialog(); // Ouvre la boîte de dialogue pour ajouter une compétition + } + + // Gestion de l'événement de clic sur le bouton "Supprimer" + else if (e.getSource() == deleteButton && isLoggedIn) { + deleteCompetition(); // Supprime la compétition sélectionnée + } + + // Gestion de l'événement de clic sur le bouton "Modifier" + else if (e.getSource() == updateButton && isLoggedIn) { + updateCompetition(); // Met à jour la compétition sélectionnée } } + private void authenticateUser() { String enteredLogin = loginField.getText(); char[] enteredPasswordChars = passwordField.getPassword(); @@ -227,47 +307,81 @@ public class Panel implements ActionListener { } } - private void addCompetition() { - try { - String lieu = lieuField.getText(); - String horaireStr = horaireField.getText(); - String placesStr = placesField.getText(); + private void showAddCompetitionDialog() { + JDialog addDialog = new JDialog(frame, "Ajouter une Compétition", true); + addDialog.setLayout(new GridLayout(0, 2)); + addDialog.setSize(400, 200); + + JTextField addLieuField = new JTextField(); + JTextField addDateField = new JTextField(new SimpleDateFormat("yyyy-MM-dd").format(new Date())); + SpinnerDateModel timeModel = new SpinnerDateModel(); + JSpinner addTimeSpinner = new JSpinner(timeModel); + JSpinner.DateEditor timeEditor = new JSpinner.DateEditor(addTimeSpinner, "HH:mm:ss"); + addTimeSpinner.setEditor(timeEditor); + JTextField addPlacesField = new JTextField(); + + addDialog.add(new JLabel("Lieu:")); + addDialog.add(addLieuField); + addDialog.add(new JLabel("Date (yyyy-MM-dd):")); + addDialog.add(addDateField); + addDialog.add(new JLabel("Heure (HH:mm:ss):")); + addDialog.add(addTimeSpinner); + addDialog.add(new JLabel("Places Disponibles:")); + addDialog.add(addPlacesField); + + JButton submitButton = new JButton("Ajouter"); + submitButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + String lieu = addLieuField.getText().trim(); + String date = addDateField.getText().trim(); + String time = timeEditor.getFormat().format(addTimeSpinner.getValue()); + String places = addPlacesField.getText().trim(); + + if (lieu.isEmpty() || places.isEmpty()) { + JOptionPane.showMessageDialog(addDialog, "Le lieu et le nombre de places disponibles ne peuvent pas être vides.", "Erreur", JOptionPane.ERROR_MESSAGE); + return; + } - if (!placesStr.isEmpty()) { try { - int placesDisponibles = Integer.parseInt(placesStr); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date parsedDate = sdf.parse(horaireStr); + String dateTime = date + " " + time; + Date parsedDate = sdf.parse(dateTime); Timestamp horaire = new Timestamp(parsedDate.getTime()); + int placesDisponibles = Integer.parseInt(places); - PreparedStatement stmt = dbConnection.prepareStatement("INSERT INTO competitions (Lieu, Horaire, PlacesDisponibles) VALUES (?, ?, ?)"); + // Insertion des données dans la base de données + PreparedStatement stmt = dbConnection.prepareStatement( + "INSERT INTO competitions (Lieu, Horaire, PlacesDisponibles) VALUES (?, ?, ?)"); stmt.setString(1, lieu); stmt.setTimestamp(2, horaire); stmt.setInt(3, placesDisponibles); int rowsAffected = stmt.executeUpdate(); - if (rowsAffected > 0) { - JOptionPane.showMessageDialog(frame, "Compétition ajoutée avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE); - loadCompetitionsData(); + JOptionPane.showMessageDialog(addDialog, "Compétition ajoutée avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE); + loadCompetitionsData(); // Mettre à jour la liste des compétitions } else { - JOptionPane.showMessageDialog(frame, "Erreur lors de l'ajout de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(addDialog, "Erreur lors de l'ajout de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE); } + addDialog.dispose(); } catch (NumberFormatException ex) { - JOptionPane.showMessageDialog(frame, "Veuillez entrer un nombre valide pour les places disponibles.", "Erreur", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(addDialog, "Le nombre de places doit être un nombre valide.", "Erreur", JOptionPane.ERROR_MESSAGE); } catch (ParseException ex) { - JOptionPane.showMessageDialog(frame, "Format de date invalide.", "Erreur", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(addDialog, "Format de date ou d'heure invalide.", "Erreur", JOptionPane.ERROR_MESSAGE); + } catch (SQLException ex) { + ex.printStackTrace(); + JOptionPane.showMessageDialog(addDialog, "Erreur lors de l'accès à la base de données.", "Erreur", JOptionPane.ERROR_MESSAGE); } - } else { - JOptionPane.showMessageDialog(frame, "Veuillez entrer un nombre pour les places disponibles.", "Erreur", JOptionPane.ERROR_MESSAGE); } - } catch (SQLException ex) { - ex.printStackTrace(); - } + }); + + addDialog.add(submitButton); + addDialog.setVisible(true); } + private void deleteCompetition() { int selectedRow = competitionsTable.getSelectedRow(); if (selectedRow != -1) { @@ -296,49 +410,215 @@ public class Panel implements ActionListener { private void updateCompetition() { int selectedRow = competitionsTable.getSelectedRow(); if (selectedRow != -1) { - try { - int competitionID = (int) competitionsTableModel.getValueAt(selectedRow, 0); - String lieu = lieuField.getText(); - String horaireStr = horaireField.getText(); - String placesStr = placesField.getText(); + int competitionID = (int) competitionsTableModel.getValueAt(selectedRow, 0); + String lieu = lieuField.getText(); + String horaireStr = horaireField.getText(); + String placesStr = placesField.getText(); - if (!horaireStr.isEmpty()) { // Ajout de la vérification de non-nullité et non-vacuité - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Date parsedDate = sdf.parse(horaireStr); - Timestamp horaire = new Timestamp(parsedDate.getTime()); + if (lieu.isEmpty() || horaireStr.isEmpty() || placesStr.isEmpty()) { + JOptionPane.showMessageDialog(frame, "Tous les champs doivent être remplis.", "Erreur", JOptionPane.ERROR_MESSAGE); + return; + } - int placesDisponibles = Integer.parseInt(placesStr); + 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); + 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); - int rowsAffected = stmt.executeUpdate(); + int rowsAffected = stmt.executeUpdate(); - if (rowsAffected > 0) { - JOptionPane.showMessageDialog(frame, "Compétition mise à jour avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE); - loadCompetitionsData(); - } else { - JOptionPane.showMessageDialog(frame, "Erreur lors de la mise à jour de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE); - } + if (rowsAffected > 0) { + JOptionPane.showMessageDialog(frame, "Compétition mise à jour avec succès.", "Succès", JOptionPane.INFORMATION_MESSAGE); + loadCompetitionsData(); } else { - JOptionPane.showMessageDialog(frame, "Veuillez entrer une date valide.", "Erreur", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(frame, "Erreur lors de la mise à jour de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE); } - } catch (SQLException | ParseException | NumberFormatException ex) { + } 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 la mise à jour de la compétition.", "Erreur", JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(frame, "Erreur lors de l'accès à la base de données.", "Erreur", JOptionPane.ERROR_MESSAGE); } } else { JOptionPane.showMessageDialog(frame, "Veuillez sélectionner une compétition à mettre à jour.", "Sélection requise", JOptionPane.WARNING_MESSAGE); } } + 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(); diff --git a/panel_admin_sae/src/src/logo.png b/panel_admin_sae/src/src/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d631bc9f3c33c9b3e3cc4b8832a5fbb98904a956 Binary files /dev/null and b/panel_admin_sae/src/src/logo.png differ