IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Java Discussion :

Génération partielle d'une BufferedImage


Sujet :

Java

  1. #21
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    J'ai essayé de prendre exemple sur ton code pour créer ma List, mais j'obtient systématiquement "java.lang.NullPointerException". Il y a sûrement quelque chose que je ne comprends pas...

    Voici le code de mon Fournisseur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public class Fournisseur {
    	private List<Point> tabcq;
     
    	public List<Point> getList() {
    		return Collections.unmodifiableList(tabcq);
    	}
    }
    Et voici celui de la class qui l'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
    public class ListenerVertC extends JPanel {
     
    	private final BufferedImage image;
    	  int xp1=1, xp2=1;
    	  int xpg1=1, xph1=1, xpb1=1, xpd1=1, xpg2=1, xpd2=1, xph2=1, xpb2=1;
    	  int xg1=xpg1-25, xg2=xpg2;
    	  int xd1=xpd1+25, xd2=xpd2;
    	  int xh1=xph1, xh2=xph2-25; 
    	  int xb1=xpb1, xb2=xpb2+25;
    	  static List<Point> tabcp = new ArrayList<>();
    	  private List<Point> tabcq;
    	  int cppd = -16711936;
     
    	public ListenerVertC(BufferedImage image, List<Point> tabcq) {
    		this.image=image;
    		this.tabcq=tabcq;
    		Graphics g = (Graphics)image.getGraphics();
    		Graphics2D g2 = image.createGraphics();
    		System.out.println("HelloV");
    		tabcp.clear();
            eerc(g2);
            for(int i=0; i<tabcp.size(); i++) {
                System.out.print(tabcp.get(i).x+" "+tabcp.get(i).y+" ");       
            }
            for(int i=0; i<tabcq.size(); i++) {
                System.out.print(tabcq.get(i).x+" "+tabcq.get(i).y+" ");       
            }
            System.out.println();
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(image,0,0,null);
    	}
     
     
    	public void eerc(Graphics2D g2) {
    		Graphics g = (Graphics)image.getGraphics();
            tabcp.add(new Point(xp1,xp2));
            tabcq.add(new Point(xp1,xp2));
    	 	Shape rectangledepart = new Rectangle2D.Float(xp1,xp2,25,25);
    		Shape rectangleEntier = new Rectangle2D.Float(0,0,706,600);
    	 	Area outside = new Area(rectangleEntier);
        	outside.subtract(new Area(rectangledepart));
     
            Color cpp= new Color(image.getRGB(xp1, xp2));
    		 int pr=cpp.getRed();
    	     int pg=cpp.getGreen();
    	     int pb=cpp.getBlue();
    		 @SuppressWarnings("unused")
    		int cpp1 = new Color(pr,pg,pb).getRGB();
     
    		 if (xg1 >=0) {
    			 Color cpg = new Color(image.getRGB(xg1, xg2));
    			 int pr2=cpg.getRed();
    			 int pg2=cpg.getGreen();
    			 int pb2=cpg.getBlue();
    			 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
    		 while (cpg1 == cppd) {
    		 Color cpgg = new Color(image.getRGB(xg1, xg2));
    		 int pr22=cpgg.getRed();
    		 int pg22=cpgg.getGreen();
    		 int pb22=cpgg.getBlue();
    		 int cpg11 = new Color(pr22,pg22,pb22).getRGB();
    		 if (cpg11 != cppd) {
    			 break;
    		 }
    	 	 g.setColor(new Color(pr2,pg2,pb2));
    	 	 g.fillRect(xpg1, xpg2, 24, 24);
    	 	 g.fillRect(xg1, xg2, 24, 24);
    		 tabcp.add(new Point(xg1, xg2));
    		 tabcq.add(new Point(xg1, xg2));
    	 	 Shape rectangleg = new Rectangle2D.Float(xg1,xg2,24,24);
    	 	 outside = OutsideRect((Rectangle2D) rectangleg, outside);
    	 	 xpg1-=25;
    	 	 xg1-=25;
    	 	 cpg1=cpg11;
    		 }
    		 }
     
    		 if (xh2 >=0) {
    			 Color cph = new Color(image.getRGB(xh1, xh2));
    			 int pr3=cph.getRed();
    			 int pg3=cph.getGreen();
    			 int pb3=cph.getBlue();
    			 int cph1 = new Color(pr3,pg3,pb3).getRGB();
     
    			 while (cph1 ==cppd) {
    				 Color cphh = new Color(image.getRGB(xh1,xh2));
    				 int pr33=cphh.getRed();
    				 int pg33=cphh.getGreen();
    				 int pb33=cphh.getBlue();
    				 int cph11 = new Color(pr33,pg33,pb33).getRGB();
     
    				 if (cph11 != cppd) {
    					 break;
    				 }
    			 		g.setColor(new Color(pr3,pg3,pb3));
    			 		g.fillRect(xph1, xph2, 24, 24);
    			 		g.fillRect(xh1, xh2, 24, 24);
    					tabcp.add(new Point(xh1, xh2));
    					tabcq.add(new Point(xh1, xh2));
    				 	Shape rectangleh = new Rectangle2D.Float(xh1,xh2,24,24);
    				 	outside = OutsideRect((Rectangle2D) rectangleh, outside);
    			 		xph2-=25;
    			 		xh2-=25;
    			 		cph1=cph11;
    			 }
    		 }
     
    		 if (xb2 >=0) {
    			 Color cpb = new Color(image.getRGB(xb1, xb2));
    			 int pr4=cpb.getRed();
    			 int pg4=cpb.getGreen();
    			 int pb4=cpb.getBlue();
    			 int cpb1 = new Color(pr4,pg4,pb4).getRGB();
     
    			 while (cpb1== cppd) {
    				 Color cpbb = new Color(image.getRGB(xb1, xb2));
    				 int pr44=cpbb.getRed();
    				 int pg44=cpbb.getGreen();
    				 int pb44=cpbb.getBlue();
    				 int cpb11 = new Color(pr44,pg44,pb44).getRGB();
     
    				 if (cpb11 != cppd) {
    					 break;
    				 }
    					 g.setColor(new Color(pr4,pg4,pb4));
    					 g.fillRect(xpb1, xpb2, 24, 24);
    					 g.fillRect(xb1, xb2, 24, 24);
    					 tabcp.add(new Point(xb1, xb2));
    					 tabcq.add(new Point(xb1, xb2));
    				 	 Shape rectangleb = new Rectangle2D.Float(xb1,xb2,24,24);
    				 	 outside = OutsideRect((Rectangle2D) rectangleb, outside);
    					 xpb2+=25;
    					 xb2+=25;
    					 cpb1=cpb11;
    			 }
    		 }
     
    		 Color cpd = new Color(image.getRGB(xd1, xd2));
    		 int pr1=cpd.getRed();
    	     int pg1=cpd.getGreen();
    	     int pb1=cpd.getBlue();
    		 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    		 while (cpd1==cppd) {
    			 Color cpdd = new Color(image.getRGB(xd1, xd2));
    			 int pr11=cpdd.getRed();
    		     int pg11=cpdd.getGreen();
    		     int pb11=cpdd.getBlue();
    			 int cpd11 = new Color(pr11,pg11,pb11).getRGB();
     
    			 if (cpd11 != cppd) {
    				 break;
    			 }
    				 g.setColor(new Color(pr1,pg1,pb1));
    				 g.fillRect(xp1, xpd2, 24, 24);
    				 g.fillRect(xd1, xd2, 24, 24);
    				 tabcp.add(new Point(xd1, xd2));
    				 tabcq.add(new Point(xd1, xd2));
    			 	 Shape rectangled = new Rectangle2D.Float(xd1,xd2,24,24);
    			 	 outside = OutsideRect((Rectangle2D) rectangled, outside);
    				 xpd1+=25;
    				 xd1+=25;
    				 cpd1=cpd11;
    		 }
    		 g2.setClip(outside);
    		 BufferedImage image2 = createImage(g2, tabcq);
    	}
     
        private Area OutsideRect(Rectangle2D r, Area c) {
        	c.subtract(new Area(r));
        	return c;
        }
     
    	public static void paintAleat(Graphics2D g2, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g2.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g2.setColor(Color.red);
    			}
    			if (nr==3) {
    				g2.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g2.setColor(Color.green);
    			}
    			if (nr==5) {
    				g2.setColor(new Color( 213, 128, 0));
    			}
    	    	g2.drawRect(x2, y2, x3, y3);
    	    	g2.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }
     
    	private static BufferedImage createImage(Graphics2D g2, List<Point> tabcq) {
            BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    		try {
    		  int x4=1,y4=1,x5=1;
    		  Point position = new Point(x4,y4);
     
    		  while (x5<=706) {
    		  if (position != tabcp  && position != tabcq)
    		  paintAleat(g2, x4, y4, 23, 23);
    		  x4+=25;
    		  x5+=25;
    		  }
    	        for(int i=0; i<tabcp.size(); i++) {
    	           g2.setColor(Color.GREEN);
    	 		   g2.drawRect(tabcp.get(i).x, tabcp.get(i).y, 23, 23);
    	        }
    		} finally {
    		  g2.dispose();
    		}
    		return image;
    }
     
    }
    Je pense que c'est la manière d'accéder à la list qui pose problème mais je ne vois pas comment m'y prendre.

  2. #22
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Le fournisseur c'est la classe qui remplit la liste, qui ajoute des points dedans.
    Ton code de fournisseur ne fonctionne pas parce que la variable n'est même initialisée (pas de new), et forcément encore moins remplie.
    Où est créée et remplie cette liste ? Dans Cases ?

    Attention, j'ai l'impression que tu modifies toutes les listes dans ListenerVertC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     tabcp.add(new Point(xg1, xg2));
    		 tabcq.add(new Point(xg1, xg2));
    ou alors il s'agit encore d'une autre liste que tu parles ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #23
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Je ne comprends pas le principe du fournisseur ici, je pensait que le fournisseur était la class qui contenait la liste (je parle ici de la liste tabcq, tabcp en est une autre) et auquel on faisait appel pour récupérer cette liste. Mais dans ce cas là, si la class fournisseur sert à modifier la liste c'est dans la class "Fournisseur" que je met le code qui ajoute des points à la liste ?
    Pour le moment, c'est dans la class "ListenerVertC" que j'ajoute des points à la liste (J'ai posté le code de cette class dans mon message précédent).
    Mais même si j'initialise la liste avec le code que j'ai actuellement dans ma class "ListenerVertC", j'ai toujours le même message

  4. #24
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par KoupaXII Voir le message
    Je ne comprends pas le principe du fournisseur ici, je pensait que le fournisseur était la class qui contenait la liste (je parle ici de la liste tabcq, tabcp en est une autre) et auquel on faisait appel pour récupérer cette liste.
    C'est bien ça. Dans ton cas, à priori donc, c'est la classe Cases.
    Citation Envoyé par KoupaXII Voir le message
    Mais dans ce cas là, si la class fournisseur sert à modifier la liste c'est dans la class "Fournisseur" que je met le code qui ajoute des points à la liste ?
    Oui, puisqu'à l'extérieur de cette classe elle est non modifiable. Ou alors il ne faut pas qu'elle le soit. Dans tous les cas s'assurer qu'on ne puisse pas la modifier dans plusieurs threads différents (si tout est fait dans l'Event Dispatcher (thread de Swing) c'est bon, bien que cela puisse être problématique si la génération des points est relativement lente (en tout cas, c'est le plus simple).
    Citation Envoyé par KoupaXII Voir le message
    Pour le moment, c'est dans la class "ListenerVertC" que j'ajoute des points à la liste (J'ai posté le code de cette class dans mon message précédent).
    Mais même si j'initialise la liste avec le code que j'ai actuellement dans ma class "ListenerVertC", j'ai toujours le même message
    Le message est dû au fait que la variable n'est pas initialisée. Peu importe dans quelle classe la liste est stockée, il faut qu'elle existe.

    Tu peux procéder comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Cases {
     
        private final List<Point> list;
     
        public Cases() {
               list = new ArrayList<>();
        }
     
        public List<Point> getPoints() {
              return Collections.unmodifiableList((list);
        }
     
        public void addPoint(int x, int y) {
              addPoints(new Point(x,y));
        }
     
        public void addPoints(Point...points) {
              for(Point point : points) {
                   list.add(point);
              }
        }
     
        public void clearPoints() {
              list.clear();
        }
     
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class ListenerVertC {
     
           private final Cases cases;
     
           public ListenerVertC(Cases cases) {
                this.cases=cases;
           }
     
           public void methodJeSaisPasQuoi() {
     
                 /*...*/
     
                 cases.addPoints(new Point(x,y));
     
                  /*...*/
                 cases.addPoint(x,y);
     
     
           }
     
           public void autreMethode() {
                for(Point point : cases.getPoints()) {
                       /*...*/
                }
           }
     
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  5. #25
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    J'ai suivis ton exemple, voilà où j'en suis:
    Dans ma class Cases, j'ai donc crée la liste et les méthodes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    public class Cases extends JPanel {
     
    [...]
     
    private final List<Point> tabcq;
     
    public Cases() {
     
    [...]
     
    	tabcq = new ArrayList<>();
    }
     
    public List<Point> getPoints() {
        return Collections.unmodifiableList(tabcq);
    }
     
    public void addPoint(int x, int y) {
        addPoints(new Point(x,y));
    }
     
    public void addPoints(Point...points) {
        for(Point point : points) {
             tabcq.add(point);
        }
    }
    Puis j'ai ensuite utilisé ces méthodes dans la class ListenerVertC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    public class ListenerVertC extends JPanel {
     
    	private final Cases cases;
     
            [...]
     
    	public ListenerVertC(BufferedImage image, Cases cases) {
            [...]
            Graphics2D g2 = image.createGraphics();
            eerc(g2);
            this.cases=cases;
    }
     
    	public void eerc(Graphics2D g2) {
     
            [...]
     
            cases.addPoints(new Point(xg1, xg2));
     
            [...]
    }
     
    }
    Le programme bloque encore au même endroit, c'est à dire au moment ou j'ajoute un point à la liste et toujours avec le même message d'erreur..

  6. #26
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    La même erreur, c'est bien "java.lang.NullPointerException" ? Tu peux me donner la stacktrace complète ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  7. #27
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Oui, c'est bien ça.

    class Cases

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    import javax.swing.*;
     
    import java.io.*;
    import java.util.List;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Random;
     
     
     
    @SuppressWarnings("serial")
     
    public class Cases extends JPanel {
     
    	final static BufferedImage baseImage = createImage();
    	static BufferedImage imageCopie;
    	private final List<Point> tabcq;
     
     
    		private static BufferedImage createImage() {
                BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    			Graphics g = (Graphics)image.createGraphics();
    			try {
    			  int x1=0,y1=0,x4=1,y4=1,x5=1;
    			  g.setColor(Color.BLACK);
    			  while (x1<=706) {
    			  g.drawLine(x1, 0, x1, 600);
    			  x1+=25;
    			  }
    			  while (y1<=600) {
    			  g.drawLine(0, y1, 707, y1);
    			  y1+=25;
    			  }
    			  while (x5<=706) {
    			  paintAleat(g, x4, y4, 23, 23);
    			  x4+=25;
    			  x5+=25;
    			  }
    			} finally {
    			  g.dispose();
    			}
    			return image;
    	}
     
    public Cases() {
    	imageCopie = copy(baseImage);
    	tabcq = new ArrayList<>();
    }
     
    public List<Point> getPoints() {
        return Collections.unmodifiableList(tabcq);
    }
     
    public void addPoint(int x, int y) {
        addPoints(new Point(x,y));
    }
     
    public void addPoints(Point...points) {
        for(Point point : points) {
             tabcq.add(point);
        }
    }
     
    public void clearPoints() {
        tabcq.clear();
    }
     
    	public void paintComponent(Graphics g) {
            g.drawImage(baseImage, 0, 0, null);
    }
     
    	public static BufferedImage getImage() {
    		return baseImage;
    	}
     
    	public static BufferedImage getImageCopie() {
    		return imageCopie;
    	}
     
     
     
    	public static void paintAleat(Graphics g, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g.setColor(Color.red);
    			}
    			if (nr==3) {
    				g.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g.setColor(Color.green);
    			}
    			if (nr==5) {
    				g.setColor(new Color( 213, 128, 0));
    			}
    	    	g.drawRect(x2, y2, x3, y3);
    	    	g.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }	
     
    	private BufferedImage copy(BufferedImage image) {
     
    		final BufferedImage copy = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
    		final Graphics2D g2d = copy.createGraphics();
    		try {
    			g2d.drawImage(image, 0, 0, null);
    		}
    		finally {
    			g2d.dispose();
    		}
    		return copy;
    	}
    }
    class ListenerVertC:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    import javax.swing.*;
     
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.awt.*;
    import java.awt.geom.Area;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
     
    public class ListenerVertC extends JPanel {
     
    	private final BufferedImage image;
    	private final Cases cases;
    	  int xp1=1, xp2=1;
    	  int xpg1=1, xph1=1, xpb1=1, xpd1=1, xpg2=1, xpd2=1, xph2=1, xpb2=1;
    	  int xg1=xpg1-25, xg2=xpg2;
    	  int xd1=xpd1+25, xd2=xpd2;
    	  int xh1=xph1, xh2=xph2-25; 
    	  int xb1=xpb1, xb2=xpb2+25;
    	  static List<Point> tabcp = new ArrayList<>();
    	  int cppd = -16711936;
     
    	public ListenerVertC(BufferedImage image, Cases cases) {
    		this.image=image;
    		this.cases=cases;
    		Graphics g = (Graphics)image.getGraphics();
    		Graphics2D g2 = image.createGraphics();
    		System.out.println("HelloV");
    		tabcp.clear();
            eerc(g2);
            for(int i=0; i<tabcp.size(); i++) {
                System.out.print(tabcp.get(i).x+" "+tabcp.get(i).y+" ");       
            }
            System.out.println();
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(image,0,0,null);
    	}
     
     
    	public void eerc(Graphics2D g2) {
    		Graphics g = (Graphics)image.getGraphics();
            tabcp.add(new Point(xp1,xp2));
     
    	 	Shape rectangledepart = new Rectangle2D.Float(xp1,xp2,25,25);
    		Shape rectangleEntier = new Rectangle2D.Float(0,0,706,600);
    	 	Area outside = new Area(rectangleEntier);
        	outside.subtract(new Area(rectangledepart));
     
            Color cpp= new Color(image.getRGB(xp1, xp2));
    		 int pr=cpp.getRed();
    	     int pg=cpp.getGreen();
    	     int pb=cpp.getBlue();
    		 @SuppressWarnings("unused")
    		int cpp1 = new Color(pr,pg,pb).getRGB();
     
    		 if (xg1 >=0) {
    			 Color cpg = new Color(image.getRGB(xg1, xg2));
    			 int pr2=cpg.getRed();
    			 int pg2=cpg.getGreen();
    			 int pb2=cpg.getBlue();
    			 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
    		 while (cpg1 == cppd) {
    		 Color cpgg = new Color(image.getRGB(xg1, xg2));
    		 int pr22=cpgg.getRed();
    		 int pg22=cpgg.getGreen();
    		 int pb22=cpgg.getBlue();
    		 int cpg11 = new Color(pr22,pg22,pb22).getRGB();
    		 if (cpg11 != cppd) {
    			 break;
    		 }
    	 	 g.setColor(new Color(pr2,pg2,pb2));
    	 	 g.fillRect(xpg1, xpg2, 24, 24);
    	 	 g.fillRect(xg1, xg2, 24, 24);
    		 tabcp.add(new Point(xg1, xg2));
    		 cases.addPoints(new Point(xg1, xg2));
    	 	 Shape rectangleg = new Rectangle2D.Float(xg1,xg2,24,24);
    	 	 outside = OutsideRect((Rectangle2D) rectangleg, outside);
    	 	 xpg1-=25;
    	 	 xg1-=25;
    	 	 cpg1=cpg11;
    		 }
    		 }
     
    		 if (xh2 >=0) {
    			 Color cph = new Color(image.getRGB(xh1, xh2));
    			 int pr3=cph.getRed();
    			 int pg3=cph.getGreen();
    			 int pb3=cph.getBlue();
    			 int cph1 = new Color(pr3,pg3,pb3).getRGB();
     
    			 while (cph1 ==cppd) {
    				 Color cphh = new Color(image.getRGB(xh1,xh2));
    				 int pr33=cphh.getRed();
    				 int pg33=cphh.getGreen();
    				 int pb33=cphh.getBlue();
    				 int cph11 = new Color(pr33,pg33,pb33).getRGB();
     
    				 if (cph11 != cppd) {
    					 break;
    				 }
    			 		g.setColor(new Color(pr3,pg3,pb3));
    			 		g.fillRect(xph1, xph2, 24, 24);
    			 		g.fillRect(xh1, xh2, 24, 24);
    					tabcp.add(new Point(xh1, xh2));
    					cases.addPoints(new Point(xh1, xh2));
    				 	Shape rectangleh = new Rectangle2D.Float(xh1,xh2,24,24);
    				 	outside = OutsideRect((Rectangle2D) rectangleh, outside);
    			 		xph2-=25;
    			 		xh2-=25;
    			 		cph1=cph11;
    			 }
    		 }
     
    		 if (xb2 >=0) {
    			 Color cpb = new Color(image.getRGB(xb1, xb2));
    			 int pr4=cpb.getRed();
    			 int pg4=cpb.getGreen();
    			 int pb4=cpb.getBlue();
    			 int cpb1 = new Color(pr4,pg4,pb4).getRGB();
     
    			 while (cpb1== cppd) {
    				 Color cpbb = new Color(image.getRGB(xb1, xb2));
    				 int pr44=cpbb.getRed();
    				 int pg44=cpbb.getGreen();
    				 int pb44=cpbb.getBlue();
    				 int cpb11 = new Color(pr44,pg44,pb44).getRGB();
     
    				 if (cpb11 != cppd) {
    					 break;
    				 }
    					 g.setColor(new Color(pr4,pg4,pb4));
    					 g.fillRect(xpb1, xpb2, 24, 24);
    					 g.fillRect(xb1, xb2, 24, 24);
    					 tabcp.add(new Point(xb1, xb2));
    					 cases.addPoints(new Point(xb1, xb2));
    				 	 Shape rectangleb = new Rectangle2D.Float(xb1,xb2,24,24);
    				 	 outside = OutsideRect((Rectangle2D) rectangleb, outside);
    					 xpb2+=25;
    					 xb2+=25;
    					 cpb1=cpb11;
    			 }
    		 }
     
    		 Color cpd = new Color(image.getRGB(xd1, xd2));
    		 int pr1=cpd.getRed();
    	     int pg1=cpd.getGreen();
    	     int pb1=cpd.getBlue();
    		 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    		 while (cpd1==cppd) {
    			 Color cpdd = new Color(image.getRGB(xd1, xd2));
    			 int pr11=cpdd.getRed();
    		     int pg11=cpdd.getGreen();
    		     int pb11=cpdd.getBlue();
    			 int cpd11 = new Color(pr11,pg11,pb11).getRGB();
     
    			 if (cpd11 != cppd) {
    				 break;
    			 }
    				 g.setColor(new Color(pr1,pg1,pb1));
    				 g.fillRect(xp1, xpd2, 24, 24);
    				 g.fillRect(xd1, xd2, 24, 24);
    				 tabcp.add(new Point(xd1, xd2));
    				 cases.addPoints(new Point(xd1, xd2));
    			 	 Shape rectangled = new Rectangle2D.Float(xd1,xd2,24,24);
    			 	 outside = OutsideRect((Rectangle2D) rectangled, outside);
    				 xpd1+=25;
    				 xd1+=25;
    				 cpd1=cpd11;
    		 }
    		 g2.setClip(outside);
    		 BufferedImage image2 = createImage(g2, cases);
    	}
     
        private Area OutsideRect(Rectangle2D r, Area c) {
        	c.subtract(new Area(r));
        	return c;
        }
     
    	public static void paintAleat(Graphics2D g2, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g2.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g2.setColor(Color.red);
    			}
    			if (nr==3) {
    				g2.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g2.setColor(Color.green);
    			}
    			if (nr==5) {
    				g2.setColor(new Color( 213, 128, 0));
    			}
    	    	g2.drawRect(x2, y2, x3, y3);
    	    	g2.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }
     
    	private static BufferedImage createImage(Graphics2D g2, Cases cases) {
            BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    		try {
    		  int x4=1,y4=1,x5=1;
    		  Point position = new Point(x4,y4);
     
    		  while (x5<=706) {
    		  if (position != tabcp  && position != cases.getPoints())
    		  paintAleat(g2, x4, y4, 23, 23);
    		  x4+=25;
    		  x5+=25;
    		  }
    	        for(int i=0; i<tabcp.size(); i++) {
    	           g2.setColor(Color.GREEN);
    	 		   g2.drawRect(tabcp.get(i).x, tabcp.get(i).y, 23, 23);
    	        }
    		} finally {
    		  g2.dispose();
    		}
    		return image;
    }
     
    }

  8. #28
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Il me faut la stacktrace complète de l'erreur.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  9. #29
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    "HelloV
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at ListenerVertC.createImage(ListenerVertC.java:218)
    at ListenerVertC.eerc(ListenerVertC.java:177)
    at ListenerVertC.<init>(ListenerVertC.java:32)
    at Fenetre$ListenerVert.actionPerformed(Fenetre.java:64)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)"

    Sachant que je peut avoir l'erreur aussi sur la ligne 140 ("cases.addPoints(new Point(xb1, xb2));" et sur la ligne 169 "cases.addPoints(new Point(xd1, xd2));"

  10. #30
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je dirais à priori que c'est cases qui est null. Tu dois créer les instances de ListenerVertC avant de créer Cases et/ou de l'affecter à la variable que tu passes au constructeur de ListenerVertC.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  11. #31
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Je ne suis pas sûr d'avoir compris ton message, mais si c'est le cas c'est bien les points que je dois initialiser avant de créer cases ?

    J'ai modifié le code de ce que j'ai compris (toujours "java.lang.NullPointerException")

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    import javax.swing.*;
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.awt.*;
    import java.awt.geom.Area;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
     
    public class ListenerVertC extends JPanel {
     
    	private final BufferedImage image;
    	  int xp1=1, xp2=1;
    	  int xpg1=1, xph1=1, xpb1=1, xpd1=1, xpg2=1, xpd2=1, xph2=1, xpb2=1;
    	  int xg1=xpg1-25, xg2=xpg2;
    	  int xd1=xpd1+25, xd2=xpd2;
    	  int xh1=xph1, xh2=xph2-25; 
    	  int xb1=xpb1, xb2=xpb2+25;
    	  static List<Point> tabcp = new ArrayList<>();
    	  Point Pg = new Point(xg1,xg2);
    	  Point Ph = new Point(xh1,xh2);
    	  Point Pd = new Point(xd1,xd2);
    	  Point Pb = new Point(xb1,xb2);
    	  int cppd = -16711936;
    	  private Cases cases;
     
     
    	public ListenerVertC(BufferedImage image, Cases cases) {
    		this.image=image;
            this.cases=cases;
    		Graphics g = (Graphics)image.getGraphics();
    		Graphics2D g2 = image.createGraphics();
    		System.out.println("HelloV");
    		tabcp.clear();
            eerc(g2);
            for(int i=0; i<tabcp.size(); i++) {
                System.out.print(tabcp.get(i).x+" "+tabcp.get(i).y+" ");       
            }
            System.out.println();
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(image,0,0,null);
    	}
     
     
    	public void eerc(Graphics2D g2) {
    		Graphics g = (Graphics)image.getGraphics();
            tabcp.add(new Point(xp1,xp2));
     
    	 	Shape rectangledepart = new Rectangle2D.Float(xp1,xp2,25,25);
    		Shape rectangleEntier = new Rectangle2D.Float(0,0,706,600);
    	 	Area outside = new Area(rectangleEntier);
        	outside.subtract(new Area(rectangledepart));
     
            Color cpp= new Color(image.getRGB(xp1, xp2));
    		 int pr=cpp.getRed();
    	     int pg=cpp.getGreen();
    	     int pb=cpp.getBlue();
    		 @SuppressWarnings("unused")
    		int cpp1 = new Color(pr,pg,pb).getRGB();
     
    		 if (xg1 >=0) {
    			 Color cpg = new Color(image.getRGB(xg1, xg2));
    			 int pr2=cpg.getRed();
    			 int pg2=cpg.getGreen();
    			 int pb2=cpg.getBlue();
    			 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
    		 while (cpg1 == cppd) {
    		 Color cpgg = new Color(image.getRGB(xg1, xg2));
    		 int pr22=cpgg.getRed();
    		 int pg22=cpgg.getGreen();
    		 int pb22=cpgg.getBlue();
    		 int cpg11 = new Color(pr22,pg22,pb22).getRGB();
    		 if (cpg11 != cppd) {
    			 break;
    		 }
    	 	 g.setColor(new Color(pr2,pg2,pb2));
    	 	 g.fillRect(xpg1, xpg2, 24, 24);
    	 	 g.fillRect(xg1, xg2, 24, 24);
    		 tabcp.add(new Point(xg1, xg2));
    		 cases.addPoints(Pg);
    	 	 Shape rectangleg = new Rectangle2D.Float(xg1,xg2,24,24);
    	 	 outside = OutsideRect((Rectangle2D) rectangleg, outside);
    	 	 xpg1-=25;
    	 	 xg1-=25;
    	 	 cpg1=cpg11;
    		 }
    		 }
     
    		 if (xh2 >=0) {
    			 Color cph = new Color(image.getRGB(xh1, xh2));
    			 int pr3=cph.getRed();
    			 int pg3=cph.getGreen();
    			 int pb3=cph.getBlue();
    			 int cph1 = new Color(pr3,pg3,pb3).getRGB();
     
    			 while (cph1 ==cppd) {
    				 Color cphh = new Color(image.getRGB(xh1,xh2));
    				 int pr33=cphh.getRed();
    				 int pg33=cphh.getGreen();
    				 int pb33=cphh.getBlue();
    				 int cph11 = new Color(pr33,pg33,pb33).getRGB();
     
    				 if (cph11 != cppd) {
    					 break;
    				 }
    			 		g.setColor(new Color(pr3,pg3,pb3));
    			 		g.fillRect(xph1, xph2, 24, 24);
    			 		g.fillRect(xh1, xh2, 24, 24);
    					tabcp.add(new Point(xh1, xh2));
    					cases.addPoints(Ph);
    				 	Shape rectangleh = new Rectangle2D.Float(xh1,xh2,24,24);
    				 	outside = OutsideRect((Rectangle2D) rectangleh, outside);
    			 		xph2-=25;
    			 		xh2-=25;
    			 		cph1=cph11;
    			 }
    		 }
     
    		 if (xb2 >=0) {
    			 Color cpb = new Color(image.getRGB(xb1, xb2));
    			 int pr4=cpb.getRed();
    			 int pg4=cpb.getGreen();
    			 int pb4=cpb.getBlue();
    			 int cpb1 = new Color(pr4,pg4,pb4).getRGB();
     
    			 while (cpb1== cppd) {
    				 Color cpbb = new Color(image.getRGB(xb1, xb2));
    				 int pr44=cpbb.getRed();
    				 int pg44=cpbb.getGreen();
    				 int pb44=cpbb.getBlue();
    				 int cpb11 = new Color(pr44,pg44,pb44).getRGB();
     
    				 if (cpb11 != cppd) {
    					 break;
    				 }
    					 g.setColor(new Color(pr4,pg4,pb4));
    					 g.fillRect(xpb1, xpb2, 24, 24);
    					 g.fillRect(xb1, xb2, 24, 24);
    					 tabcp.add(new Point(xb1, xb2));
    					 cases.addPoints(Pb);
    				 	 Shape rectangleb = new Rectangle2D.Float(xb1,xb2,24,24);
    				 	 outside = OutsideRect((Rectangle2D) rectangleb, outside);
    					 xpb2+=25;
    					 xb2+=25;
    					 cpb1=cpb11;
    			 }
    		 }
     
    		 Color cpd = new Color(image.getRGB(xd1, xd2));
    		 int pr1=cpd.getRed();
    	     int pg1=cpd.getGreen();
    	     int pb1=cpd.getBlue();
    		 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    		 while (cpd1==cppd) {
    			 Color cpdd = new Color(image.getRGB(xd1, xd2));
    			 int pr11=cpdd.getRed();
    		     int pg11=cpdd.getGreen();
    		     int pb11=cpdd.getBlue();
    			 int cpd11 = new Color(pr11,pg11,pb11).getRGB();
     
    			 if (cpd11 != cppd) {
    				 break;
    			 }
    				 g.setColor(new Color(pr1,pg1,pb1));
    				 g.fillRect(xp1, xpd2, 24, 24);
    				 g.fillRect(xd1, xd2, 24, 24);
    				 tabcp.add(new Point(xd1, xd2));
    				 cases.addPoints(Pd);
    			 	 Shape rectangled = new Rectangle2D.Float(xd1,xd2,24,24);
    			 	 outside = OutsideRect((Rectangle2D) rectangled, outside);
    				 xpd1+=25;
    				 xd1+=25;
    				 cpd1=cpd11;
    		 }
    		 g2.setClip(outside);
    		 BufferedImage image2 = createImage(g2, cases);
    	}
     
        private Area OutsideRect(Rectangle2D r, Area c) {
        	c.subtract(new Area(r));
        	return c;
        }
     
    	public static void paintAleat(Graphics2D g2, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g2.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g2.setColor(Color.red);
    			}
    			if (nr==3) {
    				g2.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g2.setColor(Color.green);
    			}
    			if (nr==5) {
    				g2.setColor(new Color( 213, 128, 0));
    			}
    	    	g2.drawRect(x2, y2, x3, y3);
    	    	g2.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }
     
    	private static BufferedImage createImage(Graphics2D g2, Cases cases) {
            BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    		try {
    		  int x4=1,y4=1,x5=1;
    		  Point position = new Point(x4,y4);
     
    		  while (x5<=706) {
    		  if (position != tabcp  && position != cases.getPoints())
    		  paintAleat(g2, x4, y4, 23, 23);
    		  x4+=25;
    		  x5+=25;
    		  }
    	        for(int i=0; i<tabcp.size(); i++) {
    	           g2.setColor(Color.GREEN);
    	 		   g2.drawRect(tabcp.get(i).x, tabcp.get(i).y, 23, 23);
    	        }
    		} finally {
    		  g2.dispose();
    		}
    		return image;
    }
     
    }

  12. #32
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Non, je parle de l'endroit où tu affectes une variable de type Cases et où tu l'utilises pour créer des "listeners". Dans une de tes autres discussions, tu avais un code comme çà (extrait) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        Cases cases = new Cases();
     
    	    bleu.addActionListener(new ListenerBleu());
    	    vert.addActionListener(new ListenerVert());
    	    orange.addActionListener(new ListenerOrange());
    	    rouge.addActionListener(new ListenerRouge());
    	    jaune.addActionListener(new ListenerJaune());
    Tu dois avoir quelque chose comme ça, dans cette même méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Cases cases = new Cases();
     
    BufferedImage image = cases.getImage();
     
    	   [...]new ListenerVertC(image,cases); // cases est initialisé avant de la passer en paramètre au constructeur de ListenerVertC
    Il faut que la variable cases contienne la référence de l'instance de Cases au moment où on invoque le constructeur.

    D'après la stacktrace que tu donnes ( ListenerVertC.createImage(ListenerVertC.java:218), l'erreur se situe en ligne 218 du fichier ListenerVertC.java.

    A priori c'est cette ligne : if (position != tabcp && position != cases.getPoints()) (peux-tu me confirmer ?). Si c'est bien cette ligne, la seule raison possible d'une NPE est que cases est null). Il s'agit du paramètre passé à la méthode createImage, méthode appelée dans public void eerc(Graphics2D g2) {, qui utilise la variable de classe cases (de la classe ListenerVertC). eerc() est appelée dans le constructeur, après que this.cases soit affectée par le paramètre cases : donc la seule raison que je vois sans avoir la possibilité de déboguer le programme, c'est que le paramètre cases soit null :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public ListenerVertC(BufferedImage image, Cases cases) {
    		this.image=image;
    		this.cases=cases;
    		Graphics g = (Graphics)image.getGraphics();
    		Graphics2D g2 = image.createGraphics();
    		System.out.println("HelloV");
    		tabcp.clear();
            eerc(g2);
            for(int i=0; i<tabcp.size(); i++) {
                System.out.print(tabcp.get(i).x+" "+tabcp.get(i).y+" ");       
            }
            System.out.println();
    	}
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  13. #33
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    A priori c'est cette ligne : if (position != tabcp && position != cases.getPoints())
    Oui, c'est celle-ci, mais j'ai donc suivis ce que tu m'a dis et le tableau fonctionne maintenant, seulement j'ai un autre problème qui que lorsque j'ajoute un Point au tableau, celui-ci ne vérifie pas que celui-ci soit déjà inscrit dans le tableau, j'obtient donc ceci en sorti:

    "HelloV
    1 1
    1 1
    ------------------------------
    HelloV
    1 1 1 26
    1 1 1 1 1 26
    ------------------------------
    HelloV
    1 1 1 26 26 1
    1 1 1 1 1 26 1 1 1 26 26 1
    ------------------------------
    HelloV
    1 1 1 26 26 1
    1 1 1 1 1 26 1 1 1 26 26 1 1 1 1 26 26 1"

    (La deuxième ligne correspond au tableau en question "tabcq").
    J'aimerais que le point n'apparaisse qu'une seule fois dans le tableau.
    Un moyen de contourner ceci ?

  14. #34
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Dans l'absolu, tu peux vérifier si un point existe déjà dans la liste, en utilisant la méthode contains() de List qui teste si un élément est déjà dans la liste en utilisant equals() pour comparer. En modifiant addPoints() par exemple comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public void addPoints(Point...points) {
        for(Point point : points) {
             if ( !tabcq.contains(point) ) { // si le point n'est pas déjà dans la liste...
                 tabcq.add(point); // ...on l'ajoute
             }
        }
    }
    Ensuite, cela peut dépendre de la raison pour laquelle on ajoute plusieurs fois le même point. Mais ça peut être compliqué à gérer selon les cas. Par exemple, si on a une procédure unique de génération de point qu'on appelle plusieurs fois, on peut vider la liste entre chaque appel (par la méthode clear() de List) : ainsi, à chaque fois on repart d'une liste vide, donc on a pas les éléments en double, sauf si la procédure elle-même génère des poins en double. Mais si tu as plusieurs procédures de génération (et c'est ce que je crois comprendre puisque tu a ListenerVertC, ListenerBleuC... ça devient compliqué de savoir quand faire le clear)

    On peut également utiliser un Set au lieu d'une List (donc d'un HashSet au lieu d'une ArrayList), mais on perd l'ordre d'insertion et on ne peut plus accéder à un point dans la liste par son index (on doit toujours parcourir tout le set) : si cet ordre n'a aucune importance, il n'y a même plus besoin du test avec contains().

    Une autre question : y'a t-il des points en commun entre ListenerVertC, ListenerBleuC, rouge, etc ? Doit-on garder les différents points en double s'ils ne sont pas générés par les mêmes "couleurs" ou non ?
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  15. #35
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    En fait, avec cette liste, je compte dessiner un rectangle avec les coordonnés du tableau de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	        for(int i=0; i<cases.getPoints().size(); i++) {
    		           Shape rectangle = new Rectangle2D.Float(cases.getPoints().get(i).x,cases.getPoints().get(i).y, 23, 23);
    		           g2.setColor(Color.GREEN);
    		 		   g2.draw(rectangle);
    		        }
    J'ai utilisé la première méthode que tu a donnée, elle correspond le mieux à ce que je veux faire.
    Une autre question : y'a t-il des points en commun entre ListenerVertC, ListenerBleuC, rouge, etc ? Doit-on garder les différents points en double s'ils ne sont pas générés par les mêmes "couleurs" ou non ?
    Oui, quand je crée des points dans ListenerVertC par exemple, je crée les mêmes dans ListenerBleuC, mais je n'ais pas besoin de les avoir en double dans mon tableau, car celui-ci contient les coordonnées des cases "conquises".

    Merci pour ton aide

  16. #36
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par KoupaXII Voir le message
    Oui, quand je crée des points dans ListenerVertC par exemple, je crée les mêmes dans ListenerBleuC, mais je n'ais pas besoin de les avoir en double dans mon tableau, car celui-ci contient les coordonnées des cases "conquises".
    Des points de même coordonnées généré par ListenerVertC et ListenerBleuC représentent donc le même point, donc c'est bien cette solution avec contains() qui te convient (on pourrait utiliser aussi un Set, mais ça va te compliquer et tu vas devoir modifier plein de code : donc laisse la List et le contains(), tu verras plus tard les Set à l'occasion).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  17. #37
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Après quelques essais, j'ai finalement encore un problème:
    J'ai voulu faire en sorte que le programme crée des rectangles d'une certaine couleur à partir des coordonnées du tableau. J'ai donc utilisé la méthode suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    	private static BufferedImage createImage(Graphics2D g2, Cases cases) {
            BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    		try {
    		  int x4=1,y4=1,x5=1;
    		  Point position = new Point(x4,y4);
     
    		  while (x5<=706) {
    		  if (position != cases.getPoints()) {
    		  paintAleat(g2, x4, y4, 23, 23);
    		  x4+=25;
    		  x5+=25;
    		  	}
    		  }
    	        for(int i=0; i<cases.getPoints().size(); i++) {
    		           Shape rectangle = new Rectangle2D.Float(cases.getPoints().get(i).x,cases.getPoints().get(i).y, 23, 23);
    		           g2.setColor(Color.GREEN);
    		 		   g2.draw(rectangle);
    		        }
    		} finally {
    		  g2.dispose();
    		}
    		return image;
    }
    Seulement, voici ce qui s'affiche dans la fenêtre:
    Nom : Prob 1.jpg
Affichages : 98
Taille : 169,3 Ko

    Je ne sais pas si c'est dû à la méthode que j'utilise pour le dessin ou la façon d'afficher l'image...
    Ne sachant pas quel(s) class est nécessaire pour trouver le problème j'ai mis toutes les class.

    La class Listener en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    import javax.swing.*;
     
    import java.io.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    import java.awt.*;
    import java.awt.geom.Area;
    import java.awt.geom.Rectangle2D;
    import java.awt.image.BufferedImage;
     
    public class ListenerVertC extends JPanel {
     
    	private final BufferedImage image;
    	  int xp1=1, xp2=1;
    	  int xpg1=1, xph1=1, xpb1=1, xpd1=1, xpg2=1, xpd2=1, xph2=1, xpb2=1;
    	  int xg1=xpg1-25, xg2=xpg2;
    	  int xd1=xpd1+25, xd2=xpd2;
    	  int xh1=xph1, xh2=xph2-25; 
    	  int xb1=xpb1, xb2=xpb2+25;
    	  static List<Point> tabcp = new ArrayList<>();
    	  int cppd = -16711936;
    	  private Cases cases;
     
     
    	public ListenerVertC(BufferedImage image, Cases cases) {
    		this.image=image;
            this.cases=cases;
    		Graphics g = (Graphics)image.getGraphics();
    		Graphics2D g2 = image.createGraphics();
    		System.out.println("HelloV");
    		tabcp.clear();
            eerc(g2);
            for(int i=0; i<tabcp.size(); i++) {
                System.out.print(tabcp.get(i).x+" "+tabcp.get(i).y+" ");       
            }
            System.out.println();
            for(int i=0; i<cases.getPoints().size(); i++) {
                System.out.print(cases.getPoints().get(i).x+" "+cases.getPoints().get(i).y+" ");       
            }
            System.out.println();
    	}
     
    	public void paintComponent(Graphics g) {
    		g.drawImage(image,0,0,null);
    	}
     
     
    	public void eerc(Graphics2D g2) {
    		Graphics g = (Graphics)image.getGraphics();
            tabcp.add(new Point(xp1,xp2));
      	    Point Pp = new Point(xp1,xp2);
    		cases.addPoints(Pp);
     
    	 	Shape rectangledepart = new Rectangle2D.Float(xp1,xp2,25,25);
    		Shape rectangleEntier = new Rectangle2D.Float(0,0,706,600);
    	 	Area outside = new Area(rectangleEntier);
        	outside.subtract(new Area(rectangledepart));
     
            Color cpp= new Color(image.getRGB(xp1, xp2));
    		 int pr=cpp.getRed();
    	     int pg=cpp.getGreen();
    	     int pb=cpp.getBlue();
    		 @SuppressWarnings("unused")
    		int cpp1 = new Color(pr,pg,pb).getRGB();
     
    		 if (xg1 >=0) {
    			 Color cpg = new Color(image.getRGB(xg1, xg2));
    			 int pr2=cpg.getRed();
    			 int pg2=cpg.getGreen();
    			 int pb2=cpg.getBlue();
    			 int cpg1 = new Color(pr2,pg2,pb2).getRGB();
     
    		 while (cpg1 == cppd) {
    	     Point Pg = new Point(xg1,xg2);
    		 Color cpgg = new Color(image.getRGB(xg1, xg2));
    		 int pr22=cpgg.getRed();
    		 int pg22=cpgg.getGreen();
    		 int pb22=cpgg.getBlue();
    		 int cpg11 = new Color(pr22,pg22,pb22).getRGB();
    		 if (cpg11 != cppd) {
    			 break;
    		 }
    	 	 g.setColor(new Color(pr2,pg2,pb2));
    	 	 g.fillRect(xpg1, xpg2, 24, 24);
    	 	 g.fillRect(xg1, xg2, 24, 24);
    		 tabcp.add(new Point(xg1, xg2));
    		 cases.addPoints(Pg);
    	 	 Shape rectangleg = new Rectangle2D.Float(xg1,xg2,24,24);
    	 	 outside = OutsideRect((Rectangle2D) rectangleg, outside);
    	 	 xpg1-=25;
    	 	 xg1-=25;
    	 	 cpg1=cpg11;
    		 }
    		 }
     
    		 if (xh2 >=0) {
    			 Color cph = new Color(image.getRGB(xh1, xh2));
    			 int pr3=cph.getRed();
    			 int pg3=cph.getGreen();
    			 int pb3=cph.getBlue();
    			 int cph1 = new Color(pr3,pg3,pb3).getRGB();
     
    			 while (cph1 ==cppd) {
    				 Point Ph = new Point(xh1,xh2);
    				 Color cphh = new Color(image.getRGB(xh1,xh2));
    				 int pr33=cphh.getRed();
    				 int pg33=cphh.getGreen();
    				 int pb33=cphh.getBlue();
    				 int cph11 = new Color(pr33,pg33,pb33).getRGB();
     
    				 if (cph11 != cppd) {
    					 break;
    				 }
    			 		g.setColor(new Color(pr3,pg3,pb3));
    			 		g.fillRect(xph1, xph2, 24, 24);
    			 		g.fillRect(xh1, xh2, 24, 24);
    					tabcp.add(new Point(xh1, xh2));
    					cases.addPoints(Ph);
    				 	Shape rectangleh = new Rectangle2D.Float(xh1,xh2,24,24);
    				 	outside = OutsideRect((Rectangle2D) rectangleh, outside);
    			 		xph2-=25;
    			 		xh2-=25;
    			 		cph1=cph11;
    			 }
    		 }
     
    		 if (xb2 >=0) {
    			 Color cpb = new Color(image.getRGB(xb1, xb2));
    			 int pr4=cpb.getRed();
    			 int pg4=cpb.getGreen();
    			 int pb4=cpb.getBlue();
    			 int cpb1 = new Color(pr4,pg4,pb4).getRGB();
     
    			 while (cpb1== cppd) {
    				 Point Pb = new Point(xb1,xb2);
    				 Color cpbb = new Color(image.getRGB(xb1, xb2));
    				 int pr44=cpbb.getRed();
    				 int pg44=cpbb.getGreen();
    				 int pb44=cpbb.getBlue();
    				 int cpb11 = new Color(pr44,pg44,pb44).getRGB();
     
    				 if (cpb11 != cppd) {
    					 break;
    				 }
    					 g.setColor(new Color(pr4,pg4,pb4));
    					 g.fillRect(xpb1, xpb2, 24, 24);
    					 g.fillRect(xb1, xb2, 24, 24);
    					 tabcp.add(new Point(xb1, xb2));
    					 cases.addPoints(Pb);
    				 	 Shape rectangleb = new Rectangle2D.Float(xb1,xb2,24,24);
    				 	 outside = OutsideRect((Rectangle2D) rectangleb, outside);
    					 xpb2+=25;
    					 xb2+=25;
    					 cpb1=cpb11;
    			 }
    		 }
     
    		 Color cpd = new Color(image.getRGB(xd1, xd2));
    		 int pr1=cpd.getRed();
    	     int pg1=cpd.getGreen();
    	     int pb1=cpd.getBlue();
    		 int cpd1 = new Color(pr1,pg1,pb1).getRGB();
     
    		 while (cpd1==cppd) {
    			 Point Pd = new Point(xd1,xd2);
    			 Color cpdd = new Color(image.getRGB(xd1, xd2));
    			 int pr11=cpdd.getRed();
    		     int pg11=cpdd.getGreen();
    		     int pb11=cpdd.getBlue();
    			 int cpd11 = new Color(pr11,pg11,pb11).getRGB();
     
    			 if (cpd11 != cppd) {
    				 break;
    			 }
    				 g.setColor(new Color(pr1,pg1,pb1));
    				 g.fillRect(xp1, xpd2, 24, 24);
    				 g.fillRect(xd1, xd2, 24, 24);
    				 tabcp.add(new Point(xd1, xd2));
    				 cases.addPoints(Pd);
    			 	 Shape rectangled = new Rectangle2D.Float(xd1,xd2,24,24);
    			 	 outside = OutsideRect((Rectangle2D) rectangled, outside);
    				 xpd1+=25;
    				 xd1+=25;
    				 cpd1=cpd11;
    		 }
    		 g2.setClip(outside);
    		 BufferedImage image2 = createImage(g2, cases);
    	}
     
        private Area OutsideRect(Rectangle2D r, Area c) {
        	c.subtract(new Area(r));
        	return c;
        }
     
    	public static void paintAleat(Graphics2D g2, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g2.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g2.setColor(Color.red);
    			}
    			if (nr==3) {
    				g2.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g2.setColor(Color.green);
    			}
    			if (nr==5) {
    				g2.setColor(new Color( 213, 128, 0));
    			}
    	    	g2.drawRect(x2, y2, x3, y3);
    	    	g2.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }
     
    	private static BufferedImage createImage(Graphics2D g2, Cases cases) {
            BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    		try {
    		  int x4=1,y4=1,x5=1;
    		  Point position = new Point(x4,y4);
     
    		  while (x5<=706) {
    		  if (position != cases.getPoints()) {
    		  paintAleat(g2, x4, y4, 23, 23);
    		  x4+=25;
    		  x5+=25;
    		  	}
    		  }
    	        for(int i=0; i<cases.getPoints().size(); i++) {
    		           Shape rectangle = new Rectangle2D.Float(cases.getPoints().get(i).x,cases.getPoints().get(i).y, 23, 23);
    		           g2.setColor(Color.GREEN);
    		 		   g2.draw(rectangle);
    		        }
    		} finally {
    		  g2.dispose();
    		}
    		return image;
    }
     
    }
    La class Cases en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    import javax.swing.*;
     
    import java.io.*;
    import java.util.List;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.GridLayout;
    import java.awt.Point;
    import java.awt.event.ActionEvent;
    import java.awt.image.BufferedImage;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.Random;
     
     
     
    @SuppressWarnings("serial")
     
    public class Cases extends JPanel {
     
    	final static BufferedImage baseImage = createImage();
    	static BufferedImage imageCopie;
    	private final List<Point> tabcq;
     
     
    		private static BufferedImage createImage() {
                BufferedImage image = new BufferedImage(706, 750, BufferedImage.TYPE_INT_RGB);
    			Graphics g = (Graphics)image.createGraphics();
    			try {
    			  int x1=0,y1=0,x4=1,y4=1,x5=1;
    			  g.setColor(Color.BLACK);
    			  while (x1<=706) {
    			  g.drawLine(x1, 0, x1, 600);
    			  x1+=25;
    			  }
    			  while (y1<=600) {
    			  g.drawLine(0, y1, 707, y1);
    			  y1+=25;
    			  }
    			  while (x5<=706) {
    			  paintAleat(g, x4, y4, 23, 23);
    			  x4+=25;
    			  x5+=25;
    			  }
    			} finally {
    			  g.dispose();
    			}
    			return image;
    	}
     
    public Cases() {
    	imageCopie = copy(baseImage);
    	tabcq = new ArrayList<>();
    }
     
    public List<Point> getPoints() {
        return Collections.unmodifiableList(tabcq);
    }
     
    public void addPoint(int x, int y) {
        addPoints(new Point(x,y));
    }
     
    public void addPoints(Point...points) {
        for(Point point : points) {
            if ( !tabcq.contains(point) ) { // si le point n'est pas déjà dans la liste...
                tabcq.add(point); // ...on l'ajoute
            }
        }
    }
     
    public void clearPoints() {
        tabcq.clear();
    }
     
    	public void paintComponent(Graphics g) {
            g.drawImage(baseImage, 0, 0, null);
    }
     
    	public static BufferedImage getImage() {
    		return baseImage;
    	}
     
    	public static BufferedImage getImageCopie() {
    		return imageCopie;
    	}
     
     
     
    	public static void paintAleat(Graphics g, int x2, int y2, int x3, int y3) {
    		while (y2<600) {
    			Random r = new Random();
    			int valeurMin = 1, valeurMax = 6;
    			int nr = valeurMin + r.nextInt(valeurMax - valeurMin);
    			if (nr==1) {
    				g.setColor(Color.blue);
    			}
    			if (nr==2) {
    				g.setColor(Color.red);
    			}
    			if (nr==3) {
    				g.setColor(Color.yellow);
    			}
    			if (nr==4) {
    				g.setColor(Color.green);
    			}
    			if (nr==5) {
    				g.setColor(new Color( 213, 128, 0));
    			}
    	    	g.drawRect(x2, y2, x3, y3);
    	    	g.fillRect(x2, y2, x3, y3);
    	    	y2+=25;
    		}
        }	
     
    	private BufferedImage copy(BufferedImage image) {
     
    		final BufferedImage copy = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
    		final Graphics2D g2d = copy.createGraphics();
    		try {
    			g2d.drawImage(image, 0, 0, null);
    		}
    		finally {
    			g2d.dispose();
    		}
    		return copy;
    	}
    }
    La class Fenetre en entier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    import java.awt.BorderLayout;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener; 
    import java.awt.image.BufferedImage;
    import javax.swing.*;
    import java.io.*;
    import java.awt.*;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JButton;
     
    @SuppressWarnings("serial")
    public class Fenetre extends JFrame {
     
    	static Cases cases = new Cases();
    	private static final BufferedImage image = cases.getImage();
     
    	public Fenetre(){
     
    		this.setTitle("Colonisation");
    	    this.setSize(706, 750);
    	    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    	    this.setLocationRelativeTo(null);
    	    this.setResizable(false);
     
    	    JButton bleu = new BB("Bleu");
    	    JButton vert = new BV("Vert");
    	    JButton orange = new BO("Orange");
    	    JButton rouge = new BR("Rouge");
    	    JButton jaune = new BJ("Jaune");
    	    JPanel content = new JPanel(new BorderLayout());
    	    JPanel contentSouth = new JPanel();
     
     
     
    	    bleu.addActionListener(new ListenerBleu());
    	    rouge.addActionListener(new ListenerRouge());
    	    vert.addActionListener(new ListenerVert());
    	    orange.addActionListener(new ListenerOrange());
    	    jaune.addActionListener(new ListenerJaune());
     
    	    contentSouth.add(rouge);
    	    contentSouth.add(bleu);
    	    contentSouth.add(vert);
    	    contentSouth.add(jaune);
    	    contentSouth.add(orange);
    	    content.add(contentSouth,BorderLayout.SOUTH);
    	    content.add(cases,BorderLayout.CENTER);
     
     
    	    this.add(content);
    	    this.setVisible(true);
      }
     
    	class ListenerBleu extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerBleuC LB = new ListenerBleuC(image, cases);
    			cases.repaint();
    		}
    	}
     
    	class ListenerVert extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerVertC LV = new ListenerVertC(image, cases);
    			cases.repaint();
    		}
    	}
     
    	class ListenerOrange extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerOrangeC LO = new ListenerOrangeC(image, cases);
    			cases.repaint();
    		}
    	}
     
    	class ListenerJaune extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerJauneC LJ = new ListenerJauneC(image, cases);
    			cases.repaint();
    		}
    	}
     
    	class ListenerRouge extends JFrame implements ActionListener {
     
    		public void actionPerformed(ActionEvent arg0) {
    			ListenerRougeC LR = new ListenerRougeC(image, cases);
    			cases.repaint();
    		}
    	}
     
    }

  18. #38
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Je ne suis pas sûr de comprendre quel est ton problème... si c'est le fait que tu voudrais des cases remplies au lieu d'avoir que la bordure, il suffit d'utiliser fill() au lieu de draw() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    g2.setColor(Color.GREEN);
    g2.fill(rectangle);
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  19. #39
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Février 2016
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Février 2016
    Messages : 33
    Points : 17
    Points
    17
    Par défaut
    Oui, c'est ce que j'essayais de faire, c'est bête comme erreur...

    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Jnlp] Problème avec FileSaveService et une BufferedImage
    Par Frac10 dans le forum Général Java
    Réponses: 4
    Dernier message: 22/06/2006, 12h25
  2. [oracle9i-Export] - Export partiel d'une table
    Par Loïck dans le forum Oracle
    Réponses: 2
    Dernier message: 20/06/2006, 10h16
  3. Ligne dans une BufferedImage avec couleur inverse
    Par bourbon dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 25/05/2006, 01h31
  4. Réponses: 4
    Dernier message: 29/01/2006, 17h54
  5. Restauration partielle d'une base de données
    Par Tiolebucheron dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/10/2005, 08h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo