diff --git a/DEV3.2/TP03/01_Luminance/JParallelogramme.java b/DEV3.2/TP03/01_Luminance/JParallelogramme.java index fa5105a..1657a1a 100644 --- a/DEV3.2/TP03/01_Luminance/JParallelogramme.java +++ b/DEV3.2/TP03/01_Luminance/JParallelogramme.java @@ -7,7 +7,6 @@ import java.util.ArrayList; public class JParallelogramme extends JComponent { private List listeCouleurs; - private List listePolygones; public JParallelogramme(List listeCouleurs) { this.setPreferredSize(new Dimension(280, 60)); diff --git a/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.class b/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.class new file mode 100644 index 0000000..b18344d Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.class differ diff --git a/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.java b/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.java new file mode 100644 index 0000000..30af283 --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/ControleurParallelogramme.java @@ -0,0 +1,45 @@ +import java.awt.*; +import javax.swing.*; +import java.awt.event.MouseListener; +import java.awt.event.MouseEvent; +import java.util.List; +import java.util.ArrayList; + +public class ControleurParallelogramme implements MouseListener { + + private CouleurList listeCouleurs; + private Fenetre fenetre; + + public ControleurParallelogramme(CouleurList listeCouleurs, Fenetre fenetre) { + this.listeCouleurs = listeCouleurs; + this.fenetre = fenetre; + + } + + public void mouseClicked(MouseEvent e) { + try { + Robot robot = new Robot(); + Color couleurPixel = robot.getPixelColor(e.getXOnScreen(), e.getYOnScreen()); + Color aSupprimer = null; + for (Color couleur : this.listeCouleurs) { + if (couleur.equals(couleurPixel)) { + aSupprimer = couleur; + System.out.println("Luminance : " + (couleur.getRed()*21 + couleur.getGreen()*72 + couleur.getBlue()*7)); + } + } + if (aSupprimer != null) { + this.listeCouleurs.remove(aSupprimer); + this.fenetre.getP().repaint(); + } + } catch (AWTException exception) { + System.err.println("Erreur du système"); + } + + } + + + public void mouseEntered(MouseEvent e) {} + public void mouseExited(MouseEvent e) {} + public void mousePressed(MouseEvent e) {} + public void mouseReleased(MouseEvent e) {} +} \ No newline at end of file diff --git a/DEV3.2/TP03/02_Chaine/CouleurList.class b/DEV3.2/TP03/02_Chaine/CouleurList.class new file mode 100644 index 0000000..a954fc6 Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/CouleurList.class differ diff --git a/DEV3.2/TP03/02_Chaine/CouleurList.java b/DEV3.2/TP03/02_Chaine/CouleurList.java new file mode 100644 index 0000000..d0f3766 --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/CouleurList.java @@ -0,0 +1,72 @@ +import java.awt.*; +import javax.swing.*; +import java.util.List; +import java.util.Iterator; + +public class CouleurList implements Iterable { + + protected E valeur; + protected CouleurList suivant; + + public CouleurList() { + this.valeur = null; + this.suivant = null; + } + + public CouleurList(E element) { + this.valeur = element; + this.suivant = null; + } + + public void add(E element) { + if (this.valeur == null) { + this.valeur = element; + } else { + CouleurList actuel = this; + while (actuel.suivant != null) { + actuel = actuel.suivant; + } + actuel.suivant = new CouleurList<>(element); + } + } + + public boolean remove(E element) { + if (this.valeur == null) { + return false; + } + + // Cas 1 : suppression de la tête + if (this.valeur.equals(element)) { + if (this.suivant != null) { + this.valeur = this.suivant.valeur; + this.suivant = this.suivant.suivant; + } else { + // Cas spécial : un seul élément + this.valeur = null; + } + return true; + } + + // Cas 2 : suppression dans le reste de la liste + CouleurList actuel = this; + while (actuel.suivant != null) { + if (actuel.suivant.valeur != null && actuel.suivant.valeur.equals(element)) { + // suppression du suivant + actuel.suivant = actuel.suivant.suivant; + return true; + } + actuel = actuel.suivant; + } + + return false; // élément non trouvé +} + + + @Override + public Iterator iterator() { + return new Iterateur(this); + } + +} + + diff --git a/DEV3.2/TP03/02_Chaine/Fenetre.class b/DEV3.2/TP03/02_Chaine/Fenetre.class new file mode 100644 index 0000000..1f0fad9 Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/Fenetre.class differ diff --git a/DEV3.2/TP03/02_Chaine/Fenetre.java b/DEV3.2/TP03/02_Chaine/Fenetre.java new file mode 100644 index 0000000..a558d84 --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/Fenetre.java @@ -0,0 +1,39 @@ +import java.awt.*; +import javax.swing.*; +import java.util.Random; +import java.util.List; +import java.util.ArrayList; + +public class Fenetre extends JFrame { + + private JParallelogramme p; + + public Fenetre() { + this.setSize(300, 100); + this.setLocation(100, 100); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setLayout(new FlowLayout(FlowLayout.CENTER)); + + CouleurList listeCouleurs = new CouleurList<>(); + + int r, g, b; + Random aleatoire = new Random(); + + for (int i = 0; i != 10; i++) { + r = Math.abs(aleatoire.nextInt()) % 255; + g = Math.abs(aleatoire.nextInt()) % 255; + b = Math.abs(aleatoire.nextInt()) % 255; + listeCouleurs.add(new Color(r, g, b)); + } + + this.p = new JParallelogramme(listeCouleurs); + + p.addMouseListener(new ControleurParallelogramme(listeCouleurs, this)); + + this.add(p); + } + + public JParallelogramme getP() { + return this.p; + } +} \ No newline at end of file diff --git a/DEV3.2/TP03/02_Chaine/Iterateur.class b/DEV3.2/TP03/02_Chaine/Iterateur.class new file mode 100644 index 0000000..dd36a18 Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/Iterateur.class differ diff --git a/DEV3.2/TP03/02_Chaine/Iterateur.java b/DEV3.2/TP03/02_Chaine/Iterateur.java new file mode 100644 index 0000000..0a042e1 --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/Iterateur.java @@ -0,0 +1,32 @@ +import java.awt.*; +import javax.swing.*; +import java.util.List; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class Iterateur implements Iterator { + + private CouleurList actuel; + + public Iterateur(CouleurList debut) { + this.actuel = debut; + } + + @Override + public boolean hasNext() { + return (this.actuel != null && this.actuel.valeur != null); + } + + @Override + public T next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + T valeur = this.actuel.valeur; + this.actuel = this.actuel.suivant; + return valeur; + } + +} + + diff --git a/DEV3.2/TP03/02_Chaine/JParallelogramme.class b/DEV3.2/TP03/02_Chaine/JParallelogramme.class new file mode 100644 index 0000000..3fe4a04 Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/JParallelogramme.class differ diff --git a/DEV3.2/TP03/02_Chaine/JParallelogramme.java b/DEV3.2/TP03/02_Chaine/JParallelogramme.java new file mode 100644 index 0000000..d11bfcf --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/JParallelogramme.java @@ -0,0 +1,46 @@ +import java.awt.*; +import javax.swing.*; +import java.util.Random; +import java.util.List; +import java.util.ArrayList; + +public class JParallelogramme extends JComponent { + + private CouleurList listeCouleurs; + + public JParallelogramme(CouleurList listeCouleurs) { + this.setPreferredSize(new Dimension(280, 60)); + + this.listeCouleurs = listeCouleurs; + } + + @Override + public void paintComponent(Graphics pinceau) { + Graphics secondPinceau = pinceau.create(); + + if (this.isOpaque()) { + secondPinceau.setColor(this.getBackground()); + secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); + } + + int[] x = {30, 50, 20, 0}; + int[] y = {0, 0, this.getHeight(), this.getHeight()}; + + + for (Color couleur : this.listeCouleurs) { + secondPinceau.setColor(couleur); + secondPinceau.fillPolygon(x, y, 4); + secondPinceau.setColor(Color.DARK_GRAY); + secondPinceau.drawPolygon(x, y, 4); + + for (int j = 0; j != 4; j++) { + x[j] += 25; + } + } + + } + + public CouleurList getListeCouleurs() { + return this.listeCouleurs; + } +} \ No newline at end of file diff --git a/DEV3.2/TP03/02_Chaine/Main.class b/DEV3.2/TP03/02_Chaine/Main.class new file mode 100644 index 0000000..0476717 Binary files /dev/null and b/DEV3.2/TP03/02_Chaine/Main.class differ diff --git a/DEV3.2/TP03/02_Chaine/Main.java b/DEV3.2/TP03/02_Chaine/Main.java new file mode 100644 index 0000000..2768c3d --- /dev/null +++ b/DEV3.2/TP03/02_Chaine/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + Fenetre fenetre = new Fenetre(); + fenetre.setVisible(true); + } +} \ No newline at end of file diff --git a/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.class b/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.class new file mode 100644 index 0000000..b18344d Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.class differ diff --git a/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.java b/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.java new file mode 100644 index 0000000..30af283 --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/ControleurParallelogramme.java @@ -0,0 +1,45 @@ +import java.awt.*; +import javax.swing.*; +import java.awt.event.MouseListener; +import java.awt.event.MouseEvent; +import java.util.List; +import java.util.ArrayList; + +public class ControleurParallelogramme implements MouseListener { + + private CouleurList listeCouleurs; + private Fenetre fenetre; + + public ControleurParallelogramme(CouleurList listeCouleurs, Fenetre fenetre) { + this.listeCouleurs = listeCouleurs; + this.fenetre = fenetre; + + } + + public void mouseClicked(MouseEvent e) { + try { + Robot robot = new Robot(); + Color couleurPixel = robot.getPixelColor(e.getXOnScreen(), e.getYOnScreen()); + Color aSupprimer = null; + for (Color couleur : this.listeCouleurs) { + if (couleur.equals(couleurPixel)) { + aSupprimer = couleur; + System.out.println("Luminance : " + (couleur.getRed()*21 + couleur.getGreen()*72 + couleur.getBlue()*7)); + } + } + if (aSupprimer != null) { + this.listeCouleurs.remove(aSupprimer); + this.fenetre.getP().repaint(); + } + } catch (AWTException exception) { + System.err.println("Erreur du système"); + } + + } + + + public void mouseEntered(MouseEvent e) {} + public void mouseExited(MouseEvent e) {} + public void mousePressed(MouseEvent e) {} + public void mouseReleased(MouseEvent e) {} +} \ No newline at end of file diff --git a/DEV3.2/TP03/03_Tableau/CouleurList.class b/DEV3.2/TP03/03_Tableau/CouleurList.class new file mode 100644 index 0000000..72c723d Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/CouleurList.class differ diff --git a/DEV3.2/TP03/03_Tableau/CouleurList.java b/DEV3.2/TP03/03_Tableau/CouleurList.java new file mode 100644 index 0000000..6fc595a --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/CouleurList.java @@ -0,0 +1,49 @@ +import java.awt.*; +import javax.swing.*; +import java.util.List; +import java.util.Iterator; +import java.util.Arrays; + +public class CouleurList implements Iterable { + + protected E[] valeurs; + + public CouleurList() { + this.valeurs = (E[]) new Object[10]; + } + + public CouleurList(E element) { + this.valeurs = (E[]) new Object[10]; + this.valeurs[0] = element; + } + + public void add(E element) { + for (int i = 0; i != this.valeurs.length; i++) { + if (this.valeurs[i] == null) { + this.valeurs[i] = element; + break; + } + } + } + + public boolean remove(E element) { + for (int i = 0; i != this.valeurs.length; i++) { + if (this.valeurs[i] != null && this.valeurs[i].equals(element)) { + for (int j = i; j != this.valeurs.length-1; j++) { + this.valeurs[j] = this.valeurs[j+1]; + } + this.valeurs[this.valeurs.length - 1] = null; + return true; + } + } + return false; + } + + @Override + public Iterator iterator() { + return new Iterateur(this); + } + +} + + diff --git a/DEV3.2/TP03/03_Tableau/Fenetre.class b/DEV3.2/TP03/03_Tableau/Fenetre.class new file mode 100644 index 0000000..1f0fad9 Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/Fenetre.class differ diff --git a/DEV3.2/TP03/03_Tableau/Fenetre.java b/DEV3.2/TP03/03_Tableau/Fenetre.java new file mode 100644 index 0000000..a558d84 --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/Fenetre.java @@ -0,0 +1,39 @@ +import java.awt.*; +import javax.swing.*; +import java.util.Random; +import java.util.List; +import java.util.ArrayList; + +public class Fenetre extends JFrame { + + private JParallelogramme p; + + public Fenetre() { + this.setSize(300, 100); + this.setLocation(100, 100); + this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + this.setLayout(new FlowLayout(FlowLayout.CENTER)); + + CouleurList listeCouleurs = new CouleurList<>(); + + int r, g, b; + Random aleatoire = new Random(); + + for (int i = 0; i != 10; i++) { + r = Math.abs(aleatoire.nextInt()) % 255; + g = Math.abs(aleatoire.nextInt()) % 255; + b = Math.abs(aleatoire.nextInt()) % 255; + listeCouleurs.add(new Color(r, g, b)); + } + + this.p = new JParallelogramme(listeCouleurs); + + p.addMouseListener(new ControleurParallelogramme(listeCouleurs, this)); + + this.add(p); + } + + public JParallelogramme getP() { + return this.p; + } +} \ No newline at end of file diff --git a/DEV3.2/TP03/03_Tableau/Iterateur.class b/DEV3.2/TP03/03_Tableau/Iterateur.class new file mode 100644 index 0000000..11d2838 Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/Iterateur.class differ diff --git a/DEV3.2/TP03/03_Tableau/Iterateur.java b/DEV3.2/TP03/03_Tableau/Iterateur.java new file mode 100644 index 0000000..f80d4fa --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/Iterateur.java @@ -0,0 +1,32 @@ +import java.awt.*; +import javax.swing.*; +import java.util.List; +import java.util.Iterator; +import java.util.NoSuchElementException; + +public class Iterateur implements Iterator { + + private CouleurList liste; + private int indice; + + public Iterateur(CouleurList liste) { + this.liste = liste; + this.indice = 0; + } + + @Override + public boolean hasNext() { + return this.indice < 10 && this.liste.valeurs[indice] != null; + } + + @Override + public T next() { + if (!hasNext()) { + throw new java.util.NoSuchElementException(); + } + return this.liste.valeurs[this.indice++]; + } + +} + + diff --git a/DEV3.2/TP03/03_Tableau/JParallelogramme.class b/DEV3.2/TP03/03_Tableau/JParallelogramme.class new file mode 100644 index 0000000..3fe4a04 Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/JParallelogramme.class differ diff --git a/DEV3.2/TP03/03_Tableau/JParallelogramme.java b/DEV3.2/TP03/03_Tableau/JParallelogramme.java new file mode 100644 index 0000000..d11bfcf --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/JParallelogramme.java @@ -0,0 +1,46 @@ +import java.awt.*; +import javax.swing.*; +import java.util.Random; +import java.util.List; +import java.util.ArrayList; + +public class JParallelogramme extends JComponent { + + private CouleurList listeCouleurs; + + public JParallelogramme(CouleurList listeCouleurs) { + this.setPreferredSize(new Dimension(280, 60)); + + this.listeCouleurs = listeCouleurs; + } + + @Override + public void paintComponent(Graphics pinceau) { + Graphics secondPinceau = pinceau.create(); + + if (this.isOpaque()) { + secondPinceau.setColor(this.getBackground()); + secondPinceau.fillRect(0, 0, this.getWidth(), this.getHeight()); + } + + int[] x = {30, 50, 20, 0}; + int[] y = {0, 0, this.getHeight(), this.getHeight()}; + + + for (Color couleur : this.listeCouleurs) { + secondPinceau.setColor(couleur); + secondPinceau.fillPolygon(x, y, 4); + secondPinceau.setColor(Color.DARK_GRAY); + secondPinceau.drawPolygon(x, y, 4); + + for (int j = 0; j != 4; j++) { + x[j] += 25; + } + } + + } + + public CouleurList getListeCouleurs() { + return this.listeCouleurs; + } +} \ No newline at end of file diff --git a/DEV3.2/TP03/03_Tableau/Main.class b/DEV3.2/TP03/03_Tableau/Main.class new file mode 100644 index 0000000..0476717 Binary files /dev/null and b/DEV3.2/TP03/03_Tableau/Main.class differ diff --git a/DEV3.2/TP03/03_Tableau/Main.java b/DEV3.2/TP03/03_Tableau/Main.java new file mode 100644 index 0000000..2768c3d --- /dev/null +++ b/DEV3.2/TP03/03_Tableau/Main.java @@ -0,0 +1,6 @@ +public class Main { + public static void main(String[] args) { + Fenetre fenetre = new Fenetre(); + fenetre.setVisible(true); + } +} \ No newline at end of file