Salve a tutti,

sto avendo non pochi problemi nella realizzazione del painting con la libreria swing...vi posto un pò di codice per arrivare subito al punto:

codice:
public class Campo extends JPanel{

private Casella[][] caselle = new Casella[Commons.NUM_RIGHE][Commons.NUM_COLONNE];

public Campo(){
super(); 		
this.setLayout(new GridLayout(Commons.NUM_RIGHE, Commons.NUM_COLONNE)); 		

for(int i=0;i<Commons.NUM_RIGHE;i++){
for(int j=0;j<Commons.NUM_COLONNE;j++){
Casella tmp = new Casella(i,j);
tmp.setVisible(true);
this.add(tmp);
caselle[i][j] = tmp;
} 		
} 	
} 	 	
public void paintComponent(Graphics g){
super.paintComponent(g);
//setBackground(Color.BLACK);
}
}
codice:
public class Casella extends JLabel{  	
private int x;
private int y;

public Casella(int x,int y){
this.x = x;
this.y = y;
}

public void paintComponent(Graphics g){ 
super.paintComponent(g);	
Graphics2D g2d = (Graphics2D) g; 		 //setBorder(BorderFactory.createLineBorder(Color.black));
g2d.fill(new Rectangle(this.x, this.y, this.getWidth(), this.getHeight())); 	g2d.drawString(this.x + "," + this.y,this.getWidth()/2,this.getHeight()/2);
} }
In pratica voglio realizzare una scacchiera che poi evolverà in qualcosa di diverso e per farlo ho creato una mia estensione di JPanel in cui ho un array di caselle, che sono a loro volta estensioni di JPanel, tengo inoltre il riferimento alle varie caselle tramite l'array caselle[][]...

detto questo ho qualche problemino con il metodo paintComponent:
in Campo chiamo il metodo della superclasse, che quindi chiama automaticamente il paintComponent di tutte le caselle che compongono il campo (giusto?)

quindi sovrascrivo paintComponent della singola casella, e qui vorrei semplicemente (per ora) disegnare i bordi di tale casella. Non posso usare setBorder(BorderFactory.createLineBorder(Color.bla ck)); perchè poi in realtà campo sarà un thread che ad ogni "passo" fa muovere i vari elementi sullo schermo e chiama il repaint del pannello stesso. Ora poichè la sleep del thread sarà molto breve (nell'ordine dei 20 ms) usando il metodo setBorder ottengo lo sfarfallio delle linee che compongono i bordi (e anche qui non ho capito perchè, immagino che la chiamata al metodo statico createLineBorder sia piuttosto lenta). Allora disegno direttamente il rettangolo del frame ma quello che ottengo è che alcune linee non sono disegnate ed altre invece si. Come mai ?

Per ora ho questi dubbi di base che non mi consentono di andare avanti...se qualcuno ha voglia di darmi una mano lo ringrazio anticipatamente !