Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    Matrice di oggetti grafici

    Salve ragazzi, mi sto avvicinando da poco al java e quindi sono incappato in un intoppo: ho bisogno di disegnare una specie di griglia formata da tanti quadratini, una sorta di scacchiera, anche se non sarà del tipo NxN, avendo poi la possibilità di lavorare con ogni singola cella della scacchiera, per esempio cambiandoci colore dopo un tempo t o cose di questo genere.
    Avevo pensato di creare la classe quadrato e di instanziare gli oggetti in una matrice tramite il costruttore a cui vengono passate le coordinate e le dimensioni del quadrato, e questo (se deve essre separato dal disegno) credo di averlo fatto bene, ma non ho idea di come disegnare tutti i quadrati che instanzio.
    Spero in un aiuto, è una cosa importante.
    Grazie in anticipo.

  2. #2
    Potresti fare un metodo paint() nella classe Quadrato che prende come parametro un oggetto Graphics dove disegni il quadrato con coordinate ed info settate prima..

    Dipende che intendi per "disegnare"...
    lolide
    Java Programmer

    Informati

  3. #3
    Ehm.. Quanti modi ci sono di intendere disegnare??

    Comunque io avevo provato a mettere questo metodo nella classe quadrato (ispirandomi iun po' a quello che avevo visto in giro, ma non ha funzionato un gran chè):

    codice:
     public void paint (Graphics g) {
                g.drawRect(x, y, width, height);
            }

  4. #4
    Originariamente inviato da Anth0ny92
    Ehm.. Quanti modi ci sono di intendere disegnare??
    Boh tipo disegni ASCII con gli asterischi?

    Originariamente inviato da Anth0ny92
    Comunque io avevo provato a mettere questo metodo nella classe quadrato (ispirandomi iun po' a quello che avevo visto in giro, ma non ha funzionato un gran chè):

    codice:
     public void paint (Graphics g) {
                g.drawRect(x, y, width, height);
            }
    In che senso non funziona? Qual'è la cosa che ti aspetti?
    lolide
    Java Programmer

    Informati

  5. #5
    Nel senso che anche se istanzio una matrice con ogni campo di tipo quadrato, non so come disegnare poi i quadrati nel frame ho provato a fare matrice[i][j].paint() ma non so che parametro passare dal momento che il metodo si aspetta un oggetto Graphics.

    Questo è il codice completo, ma ripeto che mi sono ispritao un po' a spezzoni di codice trovati in rete, potrebbe essere molto sballato e inoltre qui i parametri passati al costruttore sono sempre uguali, ma no nfate caso a quelli perchè volevo prima riuscire nel disegno e poi scrivere l'algoritmo che li calcolasse.

    In ogni caso, il risultato che voglio raggiungere è questo

    codice:
    import javax.swing.*;
    import java.awt.*;
    
    public class quadrato extends JPanel{
        int width=0;
        int height=0;
        int x=0;
        int y=0;
        
        public void paint (Graphics g) {
                g.drawRect(x, y, width, height);
            }
        public quadrato(int x, int y, int w, int h){
            this.width=w;
            this.height=h;
            this.x=x;
            this.y=y;
    
            
            
        }
    }
    
    
    
    public class disegna extends JFrame{
        public disegna(){
            setSize(500, 500);
            setVisible(true);
            
        }
    
        public static void main(String[] args){
             quadrato matrice[][]=new quadrato[10][5];
            int i;
            int j;
            
            for (i=0;i<1;i++){
                for(j=0;j<1;j++){
                    matrice[i][j]=new quadrato(1,1,100,100);
                }  
            }  
            new disegna();
            
        }
    }

  6. #6
    Chiedo scusa per l'up, ma nessuno può darmi una mano??

  7. #7
    Potresti fare una matrice di oggetti Rectangle nella classe quadrato e creare gli oggetti nel costruttore. Ridefinisci paintComponent e non paint, dato che disegnerai sul componente, e da li fai un ciclo for per disegnare la matrice. Devi però fare un cast di g a un oggetto Graphics2D (Graphics2D g2=(Graphics2D)g) e disegni i quadrati con g2.draw(matrice[i][j]) (disegna il contorno) o g2.fill(matrice[i][j]) (disegna il quadrato pieno). Spero di aver capito cosa intendi fare.

  8. #8
    @mattaleo credo tu l'abbia capito dato che già sei riuscito a farmi terminare la prima parte del lavoro: il disegno, e con un codice minore a quando io avevo solo abbozzato .
    Ora avrei bisogno solo di un altro aiuto:

    Una volta disegnata la matrice di quadrati ora non so come fare per riprenderli in un algoritmo che li cambi di colore ad intervalli regolari. Ad esempio per fare in modo che ci sia un quadrato rosso (al contrario degli altri blu) nella prima righa che si sposti verso destra ogni secondo, quindi a t=0 è rosso il primo quadrato, al primo secondo è rosso il secondo quadrato e così via..

    Posto il codice corrente per maggiore chiarezza:

    quadrato.java
    codice:
    package griglia;
    import javax.swing.*;
    import java.awt.*;
    
    public class quadrato extends JPanel{
        Rectangle  matrice[][]=new Rectangle[10][5];
        public void paintComponent (Graphics g) {
                int i,j,nx,ny;
                Graphics2D g2=(Graphics2D)g;
                for (i=0;i<10;i++) {   
                  nx=120+(25*i);
                  for (j=0;j<5;j++) {
                        ny=30+(25*j); 
                        matrice[i][j]= new Rectangle(nx,ny,20,20);
                        g2.setColor(Color.blue);
                        g2.draw(matrice[i][j]);
                        g2.fill(matrice[i][j]);
                   }
                }
         }
    }
    disegna.java
    codice:
    package griglia;
    import javax.swing.*;
    import java.awt.*;
    
    public class disegna extends JFrame{
        public disegna(){
            this.add(new quadrato());
            setSize(500, 500);
            setVisible(true);
            
        }
       
        public static void main(String[] args){
          new disegna();
        }
    }

  9. #9
    Secondo me potresti fare in due modi: definire una classe separata che estenda Rectangle e in cui memorizzi il colore del quadrato e le altre informazioni (posizione, dimensioni, ecc) (quindi anzichè fare g2.setColor(Color.blue) dovrai fare qualcosa come g2.setColor(matrice[i][j].getColore()) dove getColore() è il metodo che restituisce il colore del quadrato), e fare una matrice di oggetti di questa classe; oppure mettere come secondo campo della classe quadrato una matrice di oggetti Color e fare g2.setColor(matriceColori[i][j]). Il secondo dovrebbe essere più semplice e veloce da fare, e se devi gestire due colori puoi anche usare una matrice di boolean (es, false=blu, true=rosso) (dovrai perciò fare un if per controllare che valore ha l'elemento e quindi decidere il colore). Il primo metodo ti può essere più utile se successivamente dovrai memorizzare altre informazioni per ogni singolo quadrato. Per il cambio di colore ad intervalli regolari puoi usare la classe Timer e nel gestore evento del timer cambiare il colore del rettangolo attuale (riportandolo a blu) e del successivo (mettendolo rosso).


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.