This commit is contained in:
2025-10-26 03:30:51 +01:00
parent d5f64601a4
commit f05e5375de
12 changed files with 180 additions and 116 deletions
+50 -69
View File
@@ -1,75 +1,56 @@
# === Configuration ===
SRC_DIR := src/fr/iutfbleau/papillon
BUILD_DIR := build
DOC_DIR := doc
LIB_DIR := lib
LIB := $(LIB_DIR)/mariadb
MAIN_CLASS := fr.iutfbleau.papillon.Start
==== Paramètres du projet ==== # === Commandes principales ===
APP_NAME := papillon
MAIN_CLASS := fr.iutfbleau.papillon.Start # <-- change si ton main est ailleurs
SRC_DIR := src # Compilation du projet
BUILD_DIR:= build compile:
DIST_DIR := dist @echo === Compilation du projet ===
RES_DIR := res javac -encoding UTF-8 -cp "$(LIB)" -d $(BUILD_DIR) $(SRC_DIR)/*.java
LIB_DIR := lib @echo Compilation terminee !
Driver MariaDB # Exécution du programme
DRIVER_JAR := $(LIB_DIR)/mariadb
Séparateur de classpath selon OS
ifeq ($(OS),Windows_NT)
SEP := ;
else
SEP := :
endif
Liste des sources et classes correspondantes
SOURCES := $(shell find $(SRC_DIR) -name ".java")
CLASSES := $(SOURCES:$(SRC_DIR)/%.java=$(BUILD_DIR)/%.class)
==== Règles ====
.PHONY: all compile jar run run-jar clean rebuild
all: compile
$(BUILD_DIR):
@mkdir -p $(BUILD_DIR)
$(DIST_DIR):
@mkdir -p $(DIST_DIR)
Compilation de chaque .java vers build/ en respectant les packages
$(BUILD_DIR)/%.class: $(SRC_DIR)/%.java | $(BUILD_DIR)
@mkdir -p $(dir $@)
javac -classpath "$(DRIVER_JAR)" -d $(BUILD_DIR) $<
Compile tout + copie des ressources si dossier res/ existe
compile: $(CLASSES)
@if [ -d "$(RES_DIR)" ]; then \
echo "Copie des ressources..."; \
cp -r $(RES_DIR)/ $(BUILD_DIR)/; \
fi
@echo "==> Compilation OK"
MANIFEST avec Main-Class et Class-Path (référence le driver)
MANIFEST.MF:
@echo "Manifest-Version: 1.0" > MANIFEST.MF
@echo "Main-Class: $(MAIN_CLASS)" >> MANIFEST.MF
@echo "Class-Path: ../$(DRIVER_JAR)" >> MANIFEST.MF
Construction du JAR
jar: compile MANIFEST.MF | $(DIST_DIR)
jar cfm $(DIST_DIR)/$(APP_NAME).jar MANIFEST.MF -C $(BUILD_DIR) .
@echo "==> JAR créé: $(DIST_DIR)/$(APP_NAME).jar"
Exécution directe depuis build/ + driver sur le classpath
run: compile run: compile
java -classpath "$(BUILD_DIR)$(SEP)$(DRIVER_JAR)" $(MAIN_CLASS) @echo === Execution du programme ===
java -cp "$(BUILD_DIR);$(LIB)" $(MAIN_CLASS)
Exécution du .jar (le MANIFEST référence le driver dans lib/)
run-jar: jar
java -jar "$(DIST_DIR)/$(APP_NAME).jar"
clean:
rm -rf $(BUILD_DIR) $(DIST_DIR) MANIFEST.MF
rebuild: clean all
# Génération de la documentation Javadoc
doc: doc:
javadoc -d doc/ src/*.java @echo === Generation de la documentation Javadoc ===
javadoc -d $(DOC_DIR) -encoding UTF-8 -cp "$(LIB)" $(SRC_DIR)/*.java
@echo Documentation generee dans le dossier $(DOC_DIR)
# === Création du JAR ===
jar: compile
@echo === Creation du fichier JAR ===
echo Main-Class: $(MAIN_CLASS) > manifest.txt
jar cfm $(JAR_FILE) manifest.txt -C $(BUILD_DIR) .
@echo Archive JAR creee : $(JAR_FILE)
@del manifest.txt 2>nul || true
# === Exécution du JAR ===
run-jar: jar
@echo === Execution du JAR ===
java -cp "$(JAR_FILE);$(LIB)" -jar $(JAR_FILE)
# Nettoyage du dossier build
clean:
@echo === Nettoyage des fichiers compiles ===
@rmdir /s /q $(BUILD_DIR) 2>nul || true
@mkdir $(BUILD_DIR)
@echo Build nettoye.
# Nettoyage complet (build + doc)
reset: clean
@echo === Suppression de la documentation ===
@rmdir /s /q $(DOC_DIR) 2>nul || true
@mkdir $(DOC_DIR)
@echo Tout a ete nettoye.
# Compilation + exécution directe
all: compile run
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 840 KiB

@@ -1,3 +1,5 @@
package fr.iutfbleau.papillon;
import java.sql.*; import java.sql.*;
/** /**
@@ -1,6 +1,5 @@
package fr.iutfbleau.papillon; package fr.iutfbleau.papillon;
import java.util.ArrayList;
import javax.swing.*; import javax.swing.*;
import java.awt.event.*; import java.awt.event.*;
import java.awt.*; import java.awt.*;
@@ -1,6 +1,5 @@
package fr.iutfbleau.papillon; package fr.iutfbleau.papillon;
import javax.swing.event.*;
import java.awt.event.*; import java.awt.event.*;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
@@ -1,32 +0,0 @@
public class FichierDemarrage {
public static void main(String[] args) {
try {
String cle = UserKey.lireOuCreerCle();
int userId = UtilisateurBD.getOrCreateUserId(cle, "local_user");
// Démo rapide
Rappel r = new Rappel("Faire le TD", "chapitre JDBC", "Travail", 2);
int idNew = RappelBD.ajouterPourUtilisateur(userId, r);
for (Rappel x : RappelBD.listerParUtilisateur(userId)) {
System.out.println(" - " + x.toString());
}
r.setTitre("Faire le TD (MAJ)");
RappelBD.modifierPourUtilisateur(userId, r.getId(), r);
for (Rappel x : RappelBD.listerParUtilisateur(userId)) {
System.out.println(" * " + x.toString());
}
RappelBD.supprimerPourUtilisateur(userId, r.getId());
for (Rappel x : RappelBD.listerParUtilisateur(userId)) {
System.out.println(" # " + x.toString());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
@@ -2,7 +2,6 @@ package fr.iutfbleau.papillon;
import java.util.ArrayList; import java.util.ArrayList;
import javax.swing.*; import javax.swing.*;
import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
+121 -9
View File
@@ -1,41 +1,84 @@
package fr.iutfbleau.papillon;
import javax.swing.*; import javax.swing.*;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
/**
* La classe <code>PanelRappel</code> représente laffichage graphique
* dun rappel dans lapplication <b>Papillon</b>.
* <p>
* Chaque panneau contient le titre, un aperçu du contenu, ainsi quune
* couleur correspondant au thème du rappel.
* Lutilisateur peut interagir avec ce panneau (sélection, clic droit, etc.).
* </p>
*
* @version 1.0
* @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
*/
public class PanelRappel extends JPanel implements ActionListener, MouseListener { public class PanelRappel extends JPanel implements ActionListener, MouseListener {
/** Indique si le rappel est actuellement sélectionné. */
private boolean estSelectionne = false; private boolean estSelectionne = false;
/** Label affichant le titre du rappel. */
private JLabel lbtitre; private JLabel lbtitre;
/** Label affichant un aperçu du contenu du rappel. */
private JLabel lbcontenu; private JLabel lbcontenu;
/** Référence vers le rappel associé à ce panneau. */
private Rappel r; private Rappel r;
/** Menu contextuel (clic droit). */
private JPopupMenu menu; private JPopupMenu menu;
/** Élément du menu permettant douvrir le rappel. */
private JMenuItem itemOuvrir; private JMenuItem itemOuvrir;
/** Référence à la fenêtre principale. */
private Main main; private Main main;
/** Liste des couleurs disponibles pour les thèmes. */
private static CouleurList couleur = new CouleurList(); private static CouleurList couleur = new CouleurList();
/**
* Constructeur du panneau associé à un rappel et à la fenêtre principale.
*
* @param r le rappel à afficher
* @param main la fenêtre principale
*/
public PanelRappel(Rappel r, Main main) { public PanelRappel(Rappel r, Main main) {
super(new BorderLayout(2, 0)); super(new BorderLayout(2, 0));
this.main = main; this.main = main;
createPanel(r); createPanel(r);
} }
/**
* Constructeur du panneau associé à un rappel sans référence à la fenêtre principale.
*
* @param r le rappel à afficher
*/
public PanelRappel(Rappel r) { public PanelRappel(Rappel r) {
super(new BorderLayout(2, 0)); super(new BorderLayout(2, 0));
createPanel(r); createPanel(r);
} }
/**
* Initialise et configure le panneau pour afficher les informations du rappel.
*
* @param r le rappel à afficher
*/
public void createPanel(Rappel r){ public void createPanel(Rappel r){
this.r = r; this.r = r;
// --- Titre et contenu raccourci --- // Titre et contenu raccourci
lbtitre = new JLabel("[" + r.getRang() + "] " + r.getTitre()); lbtitre = new JLabel("[" + r.getRang() + "] " + r.getTitre());
lbcontenu = new JLabel( lbcontenu = new JLabel(
"<html>" + (r.getContenu().length() > 40 ? r.getContenu().substring(0, 40) + "..." : r.getContenu()) + "</html>" "<html>" + (r.getContenu().length() > 40 ? r.getContenu().substring(0, 40) + "..." : r.getContenu()) + "</html>"
); );
// --- Apparence de base --- // - Apparence de base
this.setPreferredSize(new Dimension(70, 50)); this.setPreferredSize(new Dimension(70, 50));
this.setBackground(couleur.couleurDe(r.getTheme())); this.setBackground(couleur.couleurDe(r.getTheme()));
this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2)); this.setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 2));
@@ -44,44 +87,69 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener
GridBagConstraints c = new GridBagConstraints(); GridBagConstraints c = new GridBagConstraints();
c.anchor = GridBagConstraints.NORTHWEST; c.anchor = GridBagConstraints.NORTHWEST;
// --- Position du titre --- // - Position du titre
c.gridx = 0; c.gridx = 0;
c.gridy = 0; c.gridy = 0;
c.weightx = 1; c.weightx = 1;
c.fill = GridBagConstraints.NONE; c.fill = GridBagConstraints.NONE;
add(lbtitre, c); add(lbtitre, c);
// --- Position du contenu --- // -Position du contenu
c.gridx = 0; c.gridx = 0;
c.gridy = 1; c.gridy = 1;
c.weightx = 1; c.weightx = 1;
c.fill = GridBagConstraints.NONE; c.fill = GridBagConstraints.NONE;
add(lbcontenu, c); add(lbcontenu, c);
// --- Menu contextuel (clic droit) --- // - Menu contextuel (clic droit)
menu = new JPopupMenu(); menu = new JPopupMenu();
itemOuvrir = new JMenuItem("Ouvrir"); itemOuvrir = new JMenuItem("Ouvrir");
itemOuvrir.addActionListener(this); itemOuvrir.addActionListener(this);
menu.add(itemOuvrir); menu.add(itemOuvrir);
// --- Activation des clics --- // - Activation des clics
addMouseListener(this); addMouseListener(this);
} }
// === GETTERS === // GETTERS
/**
* Indique si le panneau est actuellement sélectionné.
*
* @return true si le panneau est sélectionné, false sinon
*/
public boolean getSelection() { public boolean getSelection() {
return estSelectionne; return estSelectionne;
} }
/**
* Renvoie lidentifiant du rappel affiché.
*
* @return lidentifiant unique du rappel
*/
public int getId() { public int getId() {
return r.getId(); return r.getId();
} }
/**
* Renvoie le rappel associé à ce panneau.
*
* @return le rappel affiché dans ce panneau
*/
public Rappel getRappel() { public Rappel getRappel() {
return r; return r;
} }
// === ACTIONS ===
/**
* Gère les actions déclenchées par les éléments du menu contextuel.
* <p>
* Si lutilisateur clique sur "Ouvrir", la fenêtre détaillée du rappel est affichée.
* </p>
*
* @param e l’événement daction déclenché
*/
@Override @Override
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
Object src = e.getSource(); Object src = e.getSource();
@@ -92,7 +160,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener
} }
} }
// === GESTION DES CLICS SOURIS === /**
* Gère les clics de souris sur le panneau.
* <p>
* Un clic gauche sélectionne/désélectionne le panneau,
* tandis quun clic droit affiche le menu contextuel.
* </p>
*
* @param e l’événement de souris détecté
*/
@Override @Override
public void mousePressed(MouseEvent e) { public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) { if (e.isPopupTrigger()) {
@@ -104,6 +180,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener
} }
} }
/**
* Gère la libération du clic de souris.
* <p>
* Si le clic est un clic droit, le menu contextuel saffiche.
* </p>
*
* @param e l’événement de souris
*/
@Override @Override
public void mouseReleased(MouseEvent e) { public void mouseReleased(MouseEvent e) {
if (e.isPopupTrigger()) { if (e.isPopupTrigger()) {
@@ -111,6 +196,15 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener
} }
} }
/**
* Gère les clics simples ou doubles sur le panneau.
* <p>
* Un double clic gauche ouvre la fenêtre de rappel complète.
* </p>
*
* @param e l’événement de souris
*/
@Override @Override
public void mouseClicked(MouseEvent e) { public void mouseClicked(MouseEvent e) {
// === Double clic pour ouvrir la vue complète === // === Double clic pour ouvrir la vue complète ===
@@ -120,17 +214,35 @@ public class PanelRappel extends JPanel implements ActionListener, MouseListener
} }
} }
/**
* Change lapparence du panneau lorsque la souris entre dans sa zone.
*
* @param e l’événement de souris
*/
@Override @Override
public void mouseEntered(MouseEvent e) { public void mouseEntered(MouseEvent e) {
setBorder(BorderFactory.createLineBorder(Color.BLACK, 1)); setBorder(BorderFactory.createLineBorder(Color.BLACK, 1));
} }
/**
* Restaure la bordure du panneau lorsque la souris quitte sa zone.
*
* @param e l’événement de souris
*/
@Override @Override
public void mouseExited(MouseEvent e) { public void mouseExited(MouseEvent e) {
setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1)); setBorder(BorderFactory.createLineBorder(Color.LIGHT_GRAY, 1));
} }
/**
* Met à jour lapparence du panneau en fonction de son état de sélection.
* <p>
* Si le panneau est sélectionné, son fond devient gris clair
* et une bordure noire est appliquée.
* Sinon, la couleur de fond correspond au thème du rappel.
* </p>
*/
private void majApparence() { private void majApparence() {
if (estSelectionne) { if (estSelectionne) {
setBackground(Color.LIGHT_GRAY); setBackground(Color.LIGHT_GRAY);
+3 -1
View File
@@ -1,9 +1,11 @@
package fr.iutfbleau.papillon;
/** /**
* La classe <code>Rappel</code> représente un rappel utilisateur, * La classe <code>Rappel</code> représente un rappel utilisateur,
* avec un titre, un contenu, un thème et un rang de priorité. * avec un titre, un contenu, un thème et un rang de priorité.
* *
* @version 1.0 * @version 1.0
* @author Seri-khane Yolou, Aylane SEHL, Jenson VAL * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
*/ */
public class Rappel { public class Rappel {
+1 -1
View File
@@ -49,4 +49,4 @@ public class Utilisateur {
public String toString() { public String toString() {
return "Utilisateur [id=" + id + ", cle=" + cle + "]"; return "Utilisateur [id=" + id + ", cle=" + cle + "]";
} }
} }
+3 -1
View File
@@ -1,3 +1,5 @@
package fr.iutfbleau.papillon;
import java.sql.*; import java.sql.*;
/** /**
@@ -7,7 +9,7 @@ import java.sql.*;
* et de lire un utilisateur complet via sa clé.</p> * et de lire un utilisateur complet via sa clé.</p>
* *
* @version 1.0 * @version 1.0
* @author Junior * @author Seri-khane YOLOU, Aylane SEHL, Jenson VAL
*/ */
public class UtilisateurBD { public class UtilisateurBD {
Binary file not shown.

After

Width:  |  Height:  |  Size: 840 KiB