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); } }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[][]...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); } }
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 !

Rispondi quotando