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