Cambiare colore ad un poligono

di il
2 risposte

Cambiare colore ad un poligono

Ciao a tutti,
avrei bisogni di un vostro aiuto per capire come gestire dei poligoni.
In questo esempio ho dichiarato un oggetto Cella che ha come attributi 2 indici e un poligono
Nel main richiamo prima un metodo che crea tutte le CELLE e ne salva i riferimenti in una matrice, poi richiamo un metodo che disegna tutte le caselle utilizzando i riferimenti salvati nella matrice, e fin qui tutto bene.

Ora se io volessi cambiare il colore della cella con indice 2,2 come devo fare?

queste due righe di codice inserite nel main non hanno effetto, danno un risultato solo se le inserisco nel metodo paintComponent
g1.setColor(Color.red);
g1.fillPolygon(map[2][2].casella);

mi sapete dare due dritte?
Grazie
package scacchiera;


import java.awt.*;
import javax.swing.*;


/**
 *
 * @author fastor
 */

class Cella {
   
       public int indexx;
       public int indexy;
       public Polygon casella;
       
       public Cella(int indexx, int indexy,Polygon casella)
       {
           
           this.indexx=indexx;
           this.indexy=indexy;
           this.casella=casella;
       }

   }
public class Scacchiera  extends JPanel {
   final static int DIM_X=8;
   final static int DIM_Y=8;
   int zoom=50;
   static Cella[] [] map = new Cella [DIM_X] [DIM_Y];

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        Scacchiera jp1 = new Scacchiera();
        JFrame jf1 = new JFrame ("Scacchiera"); 
        jf1.setVisible (true);
        jf1.setDefaultCloseOperation (JFrame.EXIT_ON_CLOSE);
        jf1.setSize (450, 450);
        
        Container c =jf1.getContentPane();
        c.add(jp1);
        Graphics g1=jp1.getGraphics();
        
        int k,w;
        for (w=0; w<=DIM_X-1; w=w+1)
            {
            for(k=0; k<=DIM_Y-1; k=k+1) {
                jp1.creaCella(w,k,jp1);
            }
        }
        jp1.paintComponent(g1);
        
        g1.setColor(Color.red);
        g1.fillPolygon(map[2][2].casella);
        
    }
    public void creaCella (int w, int k, Scacchiera jp1){

    int i;
    int xv2,yv2, xv1, yv1;

    xv1 = zoom*w;
    yv1 = zoom*k;
    xv2 = xv1 + zoom;
    yv2 = yv1 + zoom;
   
    Polygon quad= new Polygon();
    quad.addPoint( xv1,yv1 );
    quad.addPoint( xv1,yv2 );
    quad.addPoint( xv2,yv2 );
    quad.addPoint( xv2,yv1 );
    
    Cella casella = new Cella(w,k,quad);

    map[w][k]=casella;
}
public void paintComponent(Graphics g) {
    super.paintComponent(g);
    int k,w;
    for (w=0; w<=DIM_X-1; w=w+1){
        
        for(k=0; k<=DIM_Y-1; k=k+1) {
            g.setColor(Color.blue);
            g.fillPolygon(map[w][k].casella);
            g.setColor(Color.black);
            g.drawPolygon(map[w][k].casella);
            
        }
    }
}
}

2 Risposte

  • Re: Cambiare colore ad un poligono

    fastor ha scritto:


    queste due righe di codice inserite nel main non hanno effetto, danno un risultato solo se le inserisco nel metodo paintComponent
    g1.setColor(Color.red);
    g1.fillPolygon(map[2][2].casella);
    Non va bene fare un jp1.getGraphics(); (sicuramente NON in un main).
    E non va bene invocare esplicitamente il paintComponent (è il framework Swing che lo invoca ... non tu). Non ho letto il resto del codice ... già questi problemi "bastano".

    Da questo deduco che dovresti chiarirti le idee sul painting in Swing. C'è il tutorial Oracle ufficiale, le sezioni: 2D Graphics e Performing Custom Painting.
    E trovi svariati esempi di painting tra i miei Java Examples.
  • Re: Cambiare colore ad un poligono

    Ok grazie dei riferimenti
Devi accedere o registrarti per scrivere nel forum
2 risposte