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

    metodo grafico che non funziona

    Ciao a tutti!
    Sto imparando java da sola, per implementare un algoritmo risolutivo per la mia tesi.
    Per disegnare i nodi di un grafo il professore mi ha dato alcuni strumenti già costruiti, tra cui:
    codice:
        public void addVertice(double x, double y,String et) {
                if(x < xMin) xMin = x;
                else if(x > xMax) xMax = x;
                if(y < yMin) yMin = y;
                else if(y > yMax) yMax = y;
    
                FiguraGeometrica v=null;
                double d = Math.min(xMax-xMin, yMax-yMin)/scaleFactor;
                if (vertici.size()==0) v = new Rettangolo(2*d,2*d,VERTICE_COLORE_DEFAULT);
                else v = new Cerchio(d,VERTICE_COLORE_DEFAULT);
                v.setPosizione(x,y);
                vertici.add(v);
                
                Etichetta e = new Etichetta(et);
                e.setColore(ETICHETTA_COLORE_DEFAULT);
                e.setPosizione(x,y);
                etichetteVertici.add(e);
                
                if (lavagna!=null) {
                    lavagna.aggiungi(v);
                    lavagna.aggiungi(e);
                }
        }
    che mi aggiunge un vertice alla lavagna, cioè alla finestra che corrisponde al piano cartesiano.
    codice:
    public void evidenziaVertice(int nodo, Color colore) {
            FiguraGeometrica v = getVertice(nodo);
            lavagna.cancella(v);
            v.setColore(colore);
            lavagna.aggiungi(v);
        }
    che mi cambia di colore nodo che gli passo, andando a recuperarlo con getVertice...

    Nel mio programma eseguo le istruzioni:
    codice:
     for(int k=0; k<asc.length;k++) {
                   disegnatoreGrafo.addVertice(asc[k], ord[k], nomi[k]);
                   disegnatoreGrafo.evidenziaVertice(nn, getColore(i));
    
                   nn++;
               }
    
    .....
    
    private static Color getColore(int i){
        Color[] colore =new Color[13];
        colore[0]=Color.white;
        colore[1]=Color.blue;
        colore[2]=Color.black;
        colore[3]=Color.cyan;
        colore[4]=Color.gray;
        colore[5]=Color.green;
        colore[6]=Color.lightGray;
        colore[7]=Color.magenta;
        colore[8]=Color.orange;
        colore[9]=Color.pink;
        colore[10]=Color.red;
        colore[11]=Color.yellow;
        colore[12]=Color.darkGray;
        return colore[i];
     }
    Il problema è che mi disegna i nodi tutti dello stesso colore... dipende da come gli passo io il colore?o da che altro? grazie

  2. #2
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Deve per forza fare così nel ciclo :
    codice:
     for(int k=0; k<asc.length;k++) {
                   disegnatoreGrafo.addVertice(asc[k], ord[k], nomi[k]);
                   disegnatoreGrafo.evidenziaVertice(nn, getColore(i));
    
                   nn++;
               }
    getColore(i) <----- il valore di > i < non cambia mai.

    Quindi ogni volta che esegui il ciclo for (e non ci sono istruzioni per uscirne anzitempo)
    setti tutti i nodi al colore i che hai definito al di fuori del ciclo stesso.
    Ciao, Brainjar

  3. #3
    Caspita, non ho riportato il ciclo esterno che fa variare i.... il colore mi deve variare in base ad i perchè ad ogni i corrisponde un gruppo di nodi che deve avere lo stesso colore, diverso dal gruppo di nodi successivo

  4. #4
    Non c'è nessuno che mi sa aiutare?

  5. #5
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Sembrava che ti fossi accorta da sola di cosa non funzionasse. "... Caspita non ho ....".
    Ad ogni modo devi passare il valore colore desiderato alla
    codice:
    disegnatoreGrafo.evidenziaVertice(nn, getColore(i));
    con, ad esempio,
    codice:
    disegnatoreGrafo.evidenziaVertice(nn, getColore(3));
    Ma non in un ciclo dove parti dal primo 'nn' fino all'ultimo. Altrimenti sei punto e a capo.

    Quella chiamata la devi eseguire su uno o più grafi 'mirati' da evidenziare.
    Non so se mi sono spiegato.
    Ciao, Brainjar

  6. #6
    ...non ho capito cosa intendi...

    il mio "caspita non ho..." era riferito al fatto che non ho riportato il pezzo di codice relativo al ciclo esterno che nel mio codice c'è... mi spiego meglio: il mio codice è questo:
    codice:
          
     int nn=0;
           for(int i=0; i<nDip;i++) {
               double [] asc = kmsol.getX(i);
               double [] ord = kmsol.getY(i);
               String [] nomi = kmsol.getName(i);
               for(int k=0; k<asc.length;k++) {
                   disegnatoreGrafo.addVertice(asc[k], ord[k], nomi[k]);
                   disegnatoreGrafo.evidenziaVertice(nn, getColore(i));
    
                   nn++;
               }
           }
    ma avevo riportato solo il ciclo interno....

  7. #7
    Utente di HTML.it L'avatar di Brainjar
    Registrato dal
    Nov 2004
    Messaggi
    1,162
    Infatti, nel ciclo esterno chiami il ciclo interno.
    Cambi tutte le volte il colore nel ciclo esterno e in quello interno colori tutti i nodi.
    risultato : in sequenza cambi il colore da o a 12 a tutti i nodi che ti restano di colore 12 alla fine.
    Dovresti :
    1) La prima volta crearti i nodi e dagli un colore di base (nero)

    codice:
    for(int k=0; k<asc.length;k++)
    { 
            disegnatoreGrafo.addVertice(asc[k], ord[k], nomi[k]); 
            disegnatoreGrafo.evidenziaVertice(nn, getColore(2)); 
            nn++; 
    }
    dopodichè prova a settare il colore di un solo vertice con :

    codice:
            disegnatoreGrafo.evidenziaVertice(3, getColore(10));
    Ciao, Brainjar

  8. #8
    Ti ringrazio del tuo aiuto, ma dopo l'ennesimo run adesso funziona....
    Grazie

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.