ok. tengo una clase llamada Esquema, esta clase se encarga de pintar un grafo (automáta finito) en un JFrame . Pero mi problema es : cada que cambio los datos del grafo y le pidó que pinte y despliegue el nuevo grafo, me muestra el anterior. O sea que la primera vez que corro mi programa si me genera el grafo y me lo pinta, pero cuando ingreso nuevos datos a través de otra ventana y le pido que me lo pinte me pinta el anterior, no me actualiza.
Si me genera el archivo gif pero me sigue pintando el primero que ingresé
mi codigo de la clase Esquema:
Código PHP:
package izt.uam.mx.esquema;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.io.File;
import javax.swing.JFrame;
public class Esquema extends JFrame {
private static final long serialVersionUID = 1L;
private Image esquema;
String funciont[][];
String estadosfinales[];
/**
* This is the default constructor
*/
public Esquema(String funcionTransicion[][],String estadosFinales[],String NombreArchivo,String tituloVentana){
super();
funciont = funcionTransicion;
estadosfinales = estadosFinales;
esquema= this.getEsquema(NombreArchivo);
int Ancho = esquema.getWidth(this)+9;
int Alto = esquema.getHeight(this)+36;
this.setSize(Ancho,Alto);
this.setTitle(tituloVentana);
this.setVisible(true);
this.repaint();
}
//me regresa una cadena de los estados Finales
//con el siguiente formato: "estados1 estado2 estadoi-1 estadoi"
private String getCadenaEstFinales(){
String estadosF="";
for(int i=0;i<estadosfinales.length;i++){
if(i!=estadosfinales.length-1){
estadosF= estadosF+estadosfinales[i]+" ";
}
else
estadosF=estadosF+estadosfinales[i];
}
return estadosF;
}
/*me genera un Image con el dibujo generado por el GraphViz*/
private Image getEsquema(String NombreArchivo){
String estadosFinales= getCadenaEstFinales();
Image esquemita=null;
GraphViz gv= new GraphViz();
gv.addln(gv.start_graph());
gv.addln("rankdir=LR;");
gv.addln("size=\"8,5\"");
gv.addln("node[shape=doublecircle]; "+estadosFinales+";");
gv.addln("node[shape = circle];");
for(int i=0;i<funciont.length;i++){
gv.add(""+funciont[i][0]+" -> "+funciont[i][2]+" ");/*Estoy suponiendo que los 2 primeros elementos de funcionT
son q0*/
gv.addln("[label = \""+funciont[i][1]+"\"];");
}
gv.addln(gv.end_graph());
System.out.println(gv.getDotSource());
File out = new File(NombreArchivo+".gif");
gv.writeGraphToFile(gv.getGraph(gv.getDotSource()), out);
esquemita = Toolkit.getDefaultToolkit().getImage( NombreArchivo+".gif");
MediaTracker tracker = new MediaTracker( this );
// Se añaden las imágenes a la lista del tracker
tracker.addImage( esquemita,1 );
try{
// Se bloquea la tarea durante el tiempo necesario para la carga
// de todas las imágenes
tracker.waitForAll();
} catch( InterruptedException e ) {
System.out.println( e );
}
out.delete();
return esquemita;
}
public void paint(Graphics g){
g.drawImage(esquema, 0+this.getInsets().left, 0+this.getInsets().top, this);
}
}
Bueno yo tengo tres clases que interactuan de la siguiente manera:
Interfaz Ventana ----------------->NegocioP1 --------------> Esquema
Voy a explicar como es que llamo a la clase Esquema. a lo mejor también por ahi esta el problema.
En la clase Interfaz tengo un Boton "Despliega Esquema" le aplico un actionlistener y mando a llamar a un método parecido a este:
Código PHP:
private void despliegaEsquemaM(){
VOAFD automataM=negocioP1.getAutomataM();
negocioP1.muestraEsquema(automataM,"ent","Esquema M");
}
Código PHP:
public Esquema muestraEsquema(VOAFD automata,String NombreArchivo,String tituloVentana){
String funcionTransicion[][]= automata.dameArrayFuncionTransicion();
String estadosFinales[]=automata.dameArrayEstadosFinales();
return new Esquema(funcionTransicion,estadosFinales,NombreArchivo,tituloVentana);
}