This commit is contained in:
Simoes Lukas
2025-10-16 16:23:43 +02:00
parent ca833fec2f
commit 63a15fc6c7
25 changed files with 457 additions and 1 deletions

View File

@@ -7,7 +7,6 @@ import java.util.ArrayList;
public class JParallelogramme extends JComponent { public class JParallelogramme extends JComponent {
private List<Color> listeCouleurs; private List<Color> listeCouleurs;
private List<Polygon> listePolygones;
public JParallelogramme(List<Color> listeCouleurs) { public JParallelogramme(List<Color> listeCouleurs) {
this.setPreferredSize(new Dimension(280, 60)); this.setPreferredSize(new Dimension(280, 60));

Binary file not shown.

View File

@@ -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<Color> listeCouleurs;
private Fenetre fenetre;
public ControleurParallelogramme(CouleurList<Color> 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) {}
}

Binary file not shown.

View File

@@ -0,0 +1,72 @@
import java.awt.*;
import javax.swing.*;
import java.util.List;
import java.util.Iterator;
public class CouleurList<E> implements Iterable<E> {
protected E valeur;
protected CouleurList<E> 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<E> 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<E> 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<E> iterator() {
return new Iterateur(this);
}
}

Binary file not shown.

View File

@@ -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<Color> 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;
}
}

Binary file not shown.

View File

@@ -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<T> implements Iterator<T> {
private CouleurList<T> 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;
}
}

Binary file not shown.

View File

@@ -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<Color> listeCouleurs;
public JParallelogramme(CouleurList<Color> 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<Color> getListeCouleurs() {
return this.listeCouleurs;
}
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
public class Main {
public static void main(String[] args) {
Fenetre fenetre = new Fenetre();
fenetre.setVisible(true);
}
}

Binary file not shown.

View File

@@ -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<Color> listeCouleurs;
private Fenetre fenetre;
public ControleurParallelogramme(CouleurList<Color> 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) {}
}

Binary file not shown.

View File

@@ -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<E> implements Iterable<E> {
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<E> iterator() {
return new Iterateur(this);
}
}

Binary file not shown.

View File

@@ -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<Color> 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;
}
}

Binary file not shown.

View File

@@ -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<T> implements Iterator<T> {
private CouleurList<T> 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++];
}
}

Binary file not shown.

View File

@@ -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<Color> listeCouleurs;
public JParallelogramme(CouleurList<Color> 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<Color> getListeCouleurs() {
return this.listeCouleurs;
}
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
public class Main {
public static void main(String[] args) {
Fenetre fenetre = new Fenetre();
fenetre.setVisible(true);
}
}