commit e09ae708beaabbf6111f8675a77e33075c0dcf6e Author: chmantha-ets <78504789+chmantha-ets@users.noreply.github.com> Date: Mon Sep 14 21:47:10 2026 -0400 ressources de base diff --git a/LOG121 - Simulation d'une chaîne de production.pdf b/LOG121 - Simulation d'une chaîne de production.pdf new file mode 100644 index 0000000..4a4289d Binary files /dev/null and b/LOG121 - Simulation d'une chaîne de production.pdf differ diff --git a/src/ressources/E0%.png b/src/ressources/E0%.png new file mode 100644 index 0000000..ea9a5e5 Binary files /dev/null and b/src/ressources/E0%.png differ diff --git a/src/ressources/E100%.png b/src/ressources/E100%.png new file mode 100644 index 0000000..8b049e3 Binary files /dev/null and b/src/ressources/E100%.png differ diff --git a/src/ressources/E33%.png b/src/ressources/E33%.png new file mode 100644 index 0000000..9597de2 Binary files /dev/null and b/src/ressources/E33%.png differ diff --git a/src/ressources/E66%.png b/src/ressources/E66%.png new file mode 100644 index 0000000..43d5fa0 Binary files /dev/null and b/src/ressources/E66%.png differ diff --git a/src/ressources/UA0%.png b/src/ressources/UA0%.png new file mode 100644 index 0000000..e86feae Binary files /dev/null and b/src/ressources/UA0%.png differ diff --git a/src/ressources/UA100%.png b/src/ressources/UA100%.png new file mode 100644 index 0000000..b9e4881 Binary files /dev/null and b/src/ressources/UA100%.png differ diff --git a/src/ressources/UA33%.png b/src/ressources/UA33%.png new file mode 100644 index 0000000..f9f0445 Binary files /dev/null and b/src/ressources/UA33%.png differ diff --git a/src/ressources/UA66%.png b/src/ressources/UA66%.png new file mode 100644 index 0000000..84f986f Binary files /dev/null and b/src/ressources/UA66%.png differ diff --git a/src/ressources/UM0%.png b/src/ressources/UM0%.png new file mode 100644 index 0000000..7ed9611 Binary files /dev/null and b/src/ressources/UM0%.png differ diff --git a/src/ressources/UM100%.png b/src/ressources/UM100%.png new file mode 100644 index 0000000..6f0ff74 Binary files /dev/null and b/src/ressources/UM100%.png differ diff --git a/src/ressources/UM33%.png b/src/ressources/UM33%.png new file mode 100644 index 0000000..68ee064 Binary files /dev/null and b/src/ressources/UM33%.png differ diff --git a/src/ressources/UM66%.png b/src/ressources/UM66%.png new file mode 100644 index 0000000..ff8a73a Binary files /dev/null and b/src/ressources/UM66%.png differ diff --git a/src/ressources/UMP0%.png b/src/ressources/UMP0%.png new file mode 100644 index 0000000..103f239 Binary files /dev/null and b/src/ressources/UMP0%.png differ diff --git a/src/ressources/UMP100%.png b/src/ressources/UMP100%.png new file mode 100644 index 0000000..b0f0ced Binary files /dev/null and b/src/ressources/UMP100%.png differ diff --git a/src/ressources/UMP33%.png b/src/ressources/UMP33%.png new file mode 100644 index 0000000..427fdbb Binary files /dev/null and b/src/ressources/UMP33%.png differ diff --git a/src/ressources/UMP66%.png b/src/ressources/UMP66%.png new file mode 100644 index 0000000..6f589e8 Binary files /dev/null and b/src/ressources/UMP66%.png differ diff --git a/src/ressources/UT0%.png b/src/ressources/UT0%.png new file mode 100644 index 0000000..1f2d30d Binary files /dev/null and b/src/ressources/UT0%.png differ diff --git a/src/ressources/UT100%.png b/src/ressources/UT100%.png new file mode 100644 index 0000000..5e3ceb3 Binary files /dev/null and b/src/ressources/UT100%.png differ diff --git a/src/ressources/UT33%.png b/src/ressources/UT33%.png new file mode 100644 index 0000000..42ed105 Binary files /dev/null and b/src/ressources/UT33%.png differ diff --git a/src/ressources/UT66%.png b/src/ressources/UT66%.png new file mode 100644 index 0000000..cef2ff6 Binary files /dev/null and b/src/ressources/UT66%.png differ diff --git a/src/ressources/aile.png b/src/ressources/aile.png new file mode 100644 index 0000000..1d1b9e4 Binary files /dev/null and b/src/ressources/aile.png differ diff --git a/src/ressources/avion.png b/src/ressources/avion.png new file mode 100644 index 0000000..ec160a2 Binary files /dev/null and b/src/ressources/avion.png differ diff --git a/src/ressources/configuration.xml b/src/ressources/configuration.xml new file mode 100644 index 0000000..c28ef8b --- /dev/null +++ b/src/ressources/configuration.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + 100 + + + + + + + + + + + 50 + + + + + + + + + + + 75 + + + + + + + + + + + + 110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/ressources/metal.png b/src/ressources/metal.png new file mode 100644 index 0000000..6f0325e Binary files /dev/null and b/src/ressources/metal.png differ diff --git a/src/ressources/moteur.png b/src/ressources/moteur.png new file mode 100644 index 0000000..74fc4eb Binary files /dev/null and b/src/ressources/moteur.png differ diff --git a/src/simulation/Environnement.java b/src/simulation/Environnement.java new file mode 100644 index 0000000..4e425e3 --- /dev/null +++ b/src/simulation/Environnement.java @@ -0,0 +1,21 @@ +package simulation; + +import javax.swing.SwingWorker; + +public class Environnement extends SwingWorker { + private boolean actif = true; + private static final int DELAI = 100; + + @Override + protected Object doInBackground() throws Exception { + while(actif) { + Thread.sleep(DELAI); + /** + * C'est ici que vous aurez à faire la gestion de la notion de tour. + */ + firePropertyChange("TEST", null, "Ceci est un test"); + } + return null; + } + +} \ No newline at end of file diff --git a/src/simulation/FenetrePrincipale.java b/src/simulation/FenetrePrincipale.java new file mode 100644 index 0000000..cad6af8 --- /dev/null +++ b/src/simulation/FenetrePrincipale.java @@ -0,0 +1,40 @@ +package simulation; + +import java.awt.BorderLayout; +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +import javax.swing.JFrame; + +public class FenetrePrincipale extends JFrame implements PropertyChangeListener { + + private static final long serialVersionUID = 1L; + private static final String TITRE_FENETRE = "Laboratoire 1 : LOG121 - Simulation"; + private static final Dimension DIMENSION = new Dimension(700, 700); + + public FenetrePrincipale() { + PanneauPrincipal panneauPrincipal = new PanneauPrincipal(); + MenuFenetre menuFenetre = new MenuFenetre(); + add(panneauPrincipal); + add(menuFenetre, BorderLayout.NORTH); + // Faire en sorte que le X de la fenêtre ferme la fenêtre + setDefaultCloseOperation(EXIT_ON_CLOSE); + setTitle(TITRE_FENETRE); + setSize(DIMENSION); + // Rendre la fenêtre visible + setVisible(true); + // Mettre la fenêtre au centre de l'écran + setLocationRelativeTo(null); + // Empêcher la redimension de la fenêtre + setResizable(false); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("TEST")) { + repaint(); + System.out.println(evt.getNewValue()); + } + } +} diff --git a/src/simulation/FenetreStrategie.java b/src/simulation/FenetreStrategie.java new file mode 100644 index 0000000..84d2336 --- /dev/null +++ b/src/simulation/FenetreStrategie.java @@ -0,0 +1,23 @@ +package simulation; + +import java.awt.Dimension; + +import javax.swing.JFrame; + +public class FenetreStrategie extends JFrame { + + private static final long serialVersionUID = 1L; + private static final String TITRE_FENETRE = "Sélectionnez votre stratégie de vente"; + private static final Dimension DIMENSION = new Dimension(250, 100); + private PanneauStrategie panneauStrategie = new PanneauStrategie(); + + public FenetreStrategie() { + add(panneauStrategie); + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + setTitle(TITRE_FENETRE); + setSize(DIMENSION); + setVisible(true); + setLocationRelativeTo(null); + setResizable(false); + } +} diff --git a/src/simulation/MenuFenetre.java b/src/simulation/MenuFenetre.java new file mode 100644 index 0000000..88f8fe6 --- /dev/null +++ b/src/simulation/MenuFenetre.java @@ -0,0 +1,103 @@ +package simulation; + +import java.awt.event.ActionEvent; +import java.io.File; + +import javax.swing.JFileChooser; +import javax.swing.JMenu; +import javax.swing.JMenuBar; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.filechooser.FileNameExtensionFilter; +import javax.swing.filechooser.FileSystemView; + +public class MenuFenetre extends JMenuBar { + + private static final long serialVersionUID = 1L; + private static final String MENU_FICHIER_TITRE = "Fichier"; + private static final String MENU_FICHIER_CHARGER = "Charger"; + private static final String MENU_FICHIER_QUITTER = "Quitter"; + private static final String MENU_SIMULATION_TITRE = "Simulation"; + private static final String MENU_SIMULATION_CHOISIR = "Choisir"; + private static final String MENU_AIDE_TITRE = "Aide"; + private static final String MENU_AIDE_PROPOS = "À propos de..."; + + public MenuFenetre() { + ajouterMenuFichier(); + ajouterMenuSimulation(); + ajouterMenuAide(); + } + + /** + * Créer le menu de Fichier + */ + private void ajouterMenuFichier() { + JMenu menuFichier = new JMenu(MENU_FICHIER_TITRE); + JMenuItem menuCharger = new JMenuItem(MENU_FICHIER_CHARGER); + JMenuItem menuQuitter = new JMenuItem(MENU_FICHIER_QUITTER); + + menuCharger.addActionListener((ActionEvent e) -> { + JFileChooser fileChooser = new JFileChooser(FileSystemView.getFileSystemView().getHomeDirectory()); + fileChooser.setDialogTitle("Sélectionnez un fichier de configuration"); + fileChooser.setAcceptAllFileFilterUsed(false); + // Créer un filtre + FileNameExtensionFilter filtre = new FileNameExtensionFilter(".xml", "xml"); + fileChooser.addChoosableFileFilter(filtre); + + int returnValue = fileChooser.showOpenDialog(null); + + if (returnValue == JFileChooser.APPROVE_OPTION) { + // TODO - Parser le fichier XML sélectionné + File selectedFile = fileChooser.getSelectedFile(); + System.out.println(selectedFile.getAbsolutePath()); + } + }); + + menuQuitter.addActionListener((ActionEvent e) -> { + System.exit(0); + }); + + menuFichier.add(menuCharger); + menuFichier.add(menuQuitter); + + add(menuFichier); + + } + + /** + * Créer le menu de Simulation + */ + private void ajouterMenuSimulation() { + JMenu menuSimulation = new JMenu(MENU_SIMULATION_TITRE); + JMenuItem menuChoisir = new JMenuItem(MENU_SIMULATION_CHOISIR); + menuSimulation.add(menuChoisir); + + menuChoisir.addActionListener((ActionEvent e) -> { + // Ouvrir la fenêtre de sélection + // TODO - Récupérer la bonne stratégie de vente + new FenetreStrategie(); + }); + add(menuSimulation); + + } + + /** + * Créer le menu Aide + */ + private void ajouterMenuAide() { + JMenu menuAide = new JMenu(MENU_AIDE_TITRE); + JMenuItem menuPropos = new JMenuItem(MENU_AIDE_PROPOS); + menuAide.add(menuPropos); + + menuPropos.addActionListener((ActionEvent e) -> { + JOptionPane.showMessageDialog(null, + "

Application simulant une chaine de production d'avions.

" + "
" + + "

©   2017   Ghizlane El Boussaidi

" + + "

©   2017   Dany Boisvert

" + + "

©   2017   Vincent Mattard

" + "
" + + "

École de technologie supérieure

"); + }); + add(menuAide); + } + +} diff --git a/src/simulation/PanneauPrincipal.java b/src/simulation/PanneauPrincipal.java new file mode 100644 index 0000000..cbacaad --- /dev/null +++ b/src/simulation/PanneauPrincipal.java @@ -0,0 +1,25 @@ +package simulation; + +import java.awt.Graphics; +import java.awt.Point; + +import javax.swing.JPanel; + +public class PanneauPrincipal extends JPanel { + + private static final long serialVersionUID = 1L; + + // Variables temporaires de la demonstration: + private Point position = new Point(0,0); + private Point vitesse = new Point(1,1); + private int taille = 32; + + @Override + public void paint(Graphics g) { + super.paint(g); + // On ajoute à la position le delta x et y de la vitesse + position.translate(vitesse.x, vitesse.y); + g.fillRect(position.x, position.y, taille, taille); + } + +} \ No newline at end of file diff --git a/src/simulation/PanneauStrategie.java b/src/simulation/PanneauStrategie.java new file mode 100644 index 0000000..e9afe33 --- /dev/null +++ b/src/simulation/PanneauStrategie.java @@ -0,0 +1,65 @@ +package simulation; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.util.Enumeration; + +import javax.swing.AbstractButton; +import javax.swing.ButtonGroup; +import javax.swing.JButton; +import javax.swing.JPanel; +import javax.swing.JRadioButton; +import javax.swing.SwingUtilities; + +public class PanneauStrategie extends JPanel { + + private static final long serialVersionUID = 1L; + + public PanneauStrategie() { + + ButtonGroup groupeBoutons = new ButtonGroup(); + JRadioButton strategie1 = new JRadioButton("Stratégie 1"); + JRadioButton strategie2 = new JRadioButton("Stratégie 2"); + + JButton boutonConfirmer = new JButton("Confirmer"); + + boutonConfirmer.addActionListener((ActionEvent e) -> { + // TODO - Appeler la bonne stratégie + System.out.println(getSelectedButtonText(groupeBoutons)); + // Fermer la fenêtre du composant + SwingUtilities.getWindowAncestor((Component) e.getSource()).dispose(); + }); + + JButton boutonAnnuler = new JButton("Annuler"); + + boutonAnnuler.addActionListener((ActionEvent e) -> { + // Fermer la fenêtre du composant + SwingUtilities.getWindowAncestor((Component) e.getSource()).dispose(); + }); + + groupeBoutons.add(strategie1); + groupeBoutons.add(strategie2); + add(strategie1); + add(strategie2); + add(boutonConfirmer); + add(boutonAnnuler); + + } + + /** + * Retourne le bouton sélectionné dans un groupe de boutons. + * @param groupeBoutons + * @return + */ + public String getSelectedButtonText(ButtonGroup groupeBoutons) { + for (Enumeration boutons = groupeBoutons.getElements(); boutons.hasMoreElements();) { + AbstractButton bouton = boutons.nextElement(); + if (bouton.isSelected()) { + return bouton.getText(); + } + } + + return null; + } + +} diff --git a/src/simulation/Simulation.java b/src/simulation/Simulation.java new file mode 100644 index 0000000..ab87ff4 --- /dev/null +++ b/src/simulation/Simulation.java @@ -0,0 +1,16 @@ +package simulation; + +public class Simulation { + + /** + * Cette classe représente l'application dans son ensemble. + */ + public static void main(String[] args) { + Environnement environnement = new Environnement(); + FenetrePrincipale fenetre = new FenetrePrincipale(); + + environnement.addPropertyChangeListener(fenetre); + environnement.execute(); + } + +}