Help Grafica Grafi(scusate il gioco di parole xD)

Stato
Discussione chiusa ad ulteriori risposte.

LyB

Utente Silver
3 Marzo 2010
3
2
0
54
come dal titolo è kiaro ke avrei una grossa difficoltà riguardo la programmazione grafica... praticamente devo realizzare un progetto ke consiste nell'ordinare i vertici(o nodi ) di un grafo ... ho realizzato l'interfaccia e le classe ed ora mi manca implementare "SOLO" la grafica..(non conosco molto bene la classe awt e swing).. qualcuno è in grado di aiutarmi??
PLEASE
(graficamente x ki se ne intende non deve essere una cosa difficile)si devono semplicemente visualizzare dei pallini (nodi)nei quali si puo mettere un valore e delle freccette(archi) ke le collegano ad altri nodi.... e poi bisogna visualizzare un ordinamento ....
 
awt e swing vengolo utilizzati per generare delle GUI,classiche finestre,bottoni,campi di testo e quant'altro.Se non ho capito male quello che tu vuoi realizzare sono dei disegni grafici e se così è dovresti utilizzare Canvas e Graphics.
Non ho ben capito come graficamente deve essere realizzato,però ovviamente un conto è aiutarti un altro è fartela tutta xD
 
graficamente avevo pensato di fare un bottone ke kiede se i grafi devono essere di interi o di string, un altro bottone ke kiede quanti nodi ci devono essere.poi x creare gli archi avevo pensato ma nn so se è possibile ke cliccando su un nodo e poi su l'altro appariva l'arco tra i 2 nodi, poi un bottone ke mi salva/carica il progetto e poi un altro ke mi fa l'ordinamento (di cui ho gia il codice ) ....nn è difficilissimo credo....
 
ti ringrazio :blush: diciamo ke l'inizio riuscerei a farlo xò nn so proprio come fare dei cerkietti ke ricevono valori..
ps non kiedo di scriverlo in codice sarebbe troppo , ma aiutarmi piu o meno come dovrei impostare il lavore...
 
io penserei ad una classe controllo/contenitore che ha una funzione che ha come parametro i nodi (non so come hai implementato il resto del programma) che poi ridisegnerà (compreso i collegamenti).
Li dentro implementi anche il controllo del click sui nodi e per il disegno degli archi
 
aaaaaaaaa sto uscendo pazzo :mad::mad::mad: non ci riesco proprio uff .... il prof c'ha spiegata tutta la grafica in 2 ore .... vedete voi se è possibile ...ke rabbia ... dite ke net beans è meglio di eclipse per la prog grafica??
 
io credo di si, ma non so fino a che punto possano esserti utili per quello che ti serve.
ti consiglio di riniziare il topic da capo (ovviamente non riaprirne un altro), cioè spiega:
1) quali classi hai creato e cosa fanno
2) cosa vorresti far visualizzare
3) l'eventuale interattività della grafica
4) ciò che vuoi visualizzare cambia (escludendo l'interattività diretta)?
 
innanzitutto grazie x l'attenzione....
mi spiego meglio:
Ho creato l'interfaccia Grafo, la classe astratta GrafoAstratto,la classe Arco (ke ha come parametri origine e destinazione),
poi un classe GrafoOrientato( ke ha 2 metodi grado di entrata e grado di uscita ke restituiscono un intero) tutte le classi sono generiche <N> ...i metodi del grafo sono:
int numNodi();

int numArchi();

boolean esisteNodo(N u);

boolean esisteArco(Arco<N> a);

boolean esisteArco(N u, N v);

void insNodo(N u);

void insArco(Arco<N> a);

void insArco(N u, N v);

void rimuoviNodo(N u);

void rimuoviArco(Arco<N> a);

void rimuoviArco(N u, N v);

void TopoSort();

Iterator<? extends Arco<N>> adiacenti(N u);

void clear();

Grafo<N> copia();
------------------------------------------------------------------------------------------------------------------------------------------
2)praticamente dovrei realizzare una interfaccia grafica ke all'inizio permette di inserire nodi ed archi con dei valori(io avevo penssato un pulsante ke kiede se string o int x es. dopo di ke nn saprei come far comparire i cerkietti ed inserirci i valori...) e poi un altro pulsante topoSort ke fa l'ordinamento dei nodi e degli archi (ho gia realizzato il codice ma nn so come implementarlo nella grafica =( ..)e mostra tutti i nodi allinaeti orizzontalmente (secondo il topological sort) ed il progetto mi kiede di fare anke un pulsante salva/carica (ma forse qst riesco a farlo)....
3/4) non so esistono metodi ke muovono i cerkietti lentamente dalla forma a grafo alla forma ordinata topologicamente(sarebbe un sogno xD)
 
3/4) quello va implementato manualmente.
2) l'idea per l'inserimento senza visualizzare il grafo va bene, forse perfezionabile. Un altro metodo potrebbe di scrivere le informazioni su un file.
Per quanto riguarda la visualizzazione dei cerchietti, il topi suggeritoti da razor dovrebbe essere un buon inizio.
Il salva e carica potrebbe essere implementata serializzando la classe grafo (e se non sbaglio anche le sottoclassi), oppure se usi l'idea
whivel ha detto:
Un altro metodo potrebbe di scrivere le informazioni su un file.
usare la stessa routine per il caricamento e una duale per il salvataggio

Sinceramente nel pensare a come visualizzare il grafo avevo pensato a passare il grafo ad una classe da creare che pensa a disegnarlo, ma sarebbe poco performante, visto che passaggio per riferimenti non sembrano possibili (o cmq sono da evitare secondo il manuale).
La soluzione che mi è venuta in mente è di creare la classe per il disegno del grafo come contenitore/controllo in modo da essere piazzato su un form e di inserire come variabile privata un oggetto di tipo grafo. A questo punto la classe contenitore offrirà dei metodi di interfaccia per accedere a questo oggetto ed è li che dovrai lavorare. Ogni volta che richiami uno di questi metodi interfaccia lui penserà a ridisegnare il grafo. In questo modo dovrebbe essere "facilmente" implementabile anche il click sui nodi per inserire gli archi. La cosa che potrebbe essere complicata e il sort (sarà più difficile il punto 3/4, però facilitando il ridisegno complessivo della rete).

A questo punto ti chiederei un attimo come funziona (a parole, grandi linee) il topological sort.
 
si certo il topological sort prende un grafo e vede innanzittuto se è ciclico o meno xkè se è ciclico nn si puo fare... cmq per prima cosa prende il nodo ke ha grado di entrata zero (quindi punta solamente) e lo metto in una linkedlist, poi controlla se ci sono altri elementi con grado di entrata zero (di solito non ce ne sono).poi bisogna considerare il grafo senza l'elemento ke abbiamo messo prima nella lista(conviene creare una copia del grafo e rimuovere quindi tale nodo con il suo arco) ,quindi l'elemento successivo alla "radice" diventa radice e se il grado di entrata è zero lo aggiungiamo come prima nella linked list e poi si fa sempre qst procedimento fino a qnd i nodi nn finiscono(si memorizzano anke gli archi)....lo scopo del topological sort è mostrare gli elementi in ordine orizzontale come una linked list con i puntatori(gli archi) ke puntano solo a destra ......
 
Stato
Discussione chiusa ad ulteriori risposte.