Foros del Web » Programación para mayores de 30 ;) » Java »

Crear dinamismo en un gráfico

Estas en el tema de Crear dinamismo en un gráfico en el foro de Java en Foros del Web. Hola gente, estoy haciendo una animación de un termómetro usando JFreeChart. Lo que tengo que haces es ingresar un valor de temperatura y ver cómo ...
  #1 (permalink)  
Antiguo 07/08/2013, 10:20
Avatar de adrianBenjuya  
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 12 años
Puntos: 0
Crear dinamismo en un gráfico

Hola gente, estoy haciendo una animación de un termómetro usando JFreeChart. Lo que tengo que haces es ingresar un valor de temperatura y ver cómo el termómetro DE A POCO va alcanzando ese valor. Estoy implementando el método Thread.sleep(int milis) para que luego de presionar el botón el termómetro adquiera cada 1 segundo (Thread.sleep(1000)) un valor cada vez más cercano al valor final ingresado.

Todo esto lo hago con un for obviamente. Mi problema es que no me crea el dinamismo, sino que al finalizar el for, recién ahí se dibuja el valor del termómetro en su valor final, no puedo observar la transición de los valores.

¿Tendré que usar algún método para refrescar el JFrame o el JPanel donde está mi gráfico?

Saludos.
  #2 (permalink)  
Antiguo 07/08/2013, 10:46
 
Fecha de Ingreso: julio-2013
Mensajes: 5
Antigüedad: 11 años, 4 meses
Puntos: 0
Respuesta: Crear dinamismo en un gráfico

Dime como estas generando la grafica???...

Si es un paint por ejemplo en el for debes mandar a re-dibujar la figura para simular el dinamismo...
Por ejemplo tengo un hilo.
despues de ejecutarlo debo llamar al metodo paint que me dibuja la grafica...

Mira mi ejemplo es de un hilo que simula ser un reloj que se redibuja en un label...

//Inicio el Hilo (Thread)
public void run (){
while(activo){
for(sc=0; sc<=59; sc=sc+1){
try{
cronometro.sleep(1000);
}
catch(InterruptedException e){}
}
cont=cont+1;
}
}

//Metodo que me dibuja en los label
public void paint(Graphics g){
int j=0;
int min=d.MINUTE;
Date d1=new Date();
int min1=d1.getMinutes();
int hora=d1.getHours();
try{

while(cronometro.isAlive()){
label.setText(""+hora+ " : ");
System.out.println(min+sc);

System.out.println(sc);
label2.setText(": "+(sc));
label1.setText(""+(min1+cont));
cronometro.sleep(1000);
j++;
}
}catch(Exception a){}
}

//En el boton iniciar tengo esto..

cronometro.start();
repaint();

//El metodo repaint hace que se refresque la grafica cada vez que el hilo cambia su valor.....
  #3 (permalink)  
Antiguo 07/08/2013, 12:51
Avatar de adrianBenjuya  
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 12 años
Puntos: 0
Respuesta: Crear dinamismo en un gráfico

Realmente no se responderte si es Paint, yo creo un JFreeChart con la forma de un termómetro, al cual le paso un DataSet que muestra el valor del termómetro en un instante. Lo que hago desde mi JFrame es que capture un valor del termómetro al presionar un botón y que haga un for dándole valores al DataSet hasta llegar a ese valor final. JFreeChart lo que hace es devolverme un JPanel con el gráfico actualizado cada vez que yo modifico el DataSet, pero el problema es que cuando lo hago con un for, espera hasta terminar de pintarlo todo y recién ahí me devuelve el gráfico, no puedo ver toda la transición del medio. Encontré un código que decían que resolvía el problema pero no me dio resultado. Te paso lo que tengo

Código:
//ESTO HACE EL BOTÓN
btnIngresar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				termometro.setA(30.0);
				for(double x = 0.0; x <= 4; x+=0.01){
					termometro.setDataset(x);
					refreshChart();
					 try {
						 Thread.sleep(1000);
					 } 
					 catch(InterruptedException ex) {
						 Thread.currentThread().interrupt();
					 }
				}
				
			}
		});

//ACA SE CAMBIA EL VALOR DEL TERMÓMETRO
 public void setDataset(double x) {
		 dataset.setValue(funcion(x, tau, A));
	 }
	 

//ACA RESFRESCO EL GRÁFICO (ÉSTE CÓDIGO NO ME SIRVIÓ)
	private void refreshChart() {
	    grafico.removeAll();
	    grafico.revalidate(); // This removes the old chart 
	    JFreeChart aChart = termometro.getGrafico(); 
	    aChart.removeLegend(); 
	    ChartPanel chartPanel = new ChartPanel(aChart); 
	    grafico.setLayout(new BorderLayout()); 
	    grafico.add(chartPanel, BorderLayout.CENTER); 
	    grafico.repaint(); // This method makes the new chart appear
	}

//ACA SE CREA EL GRÁFICO
	public JFreeChart getGrafico() {
		ThermometerPlot thermometerplot = new ThermometerPlot(dataset);
        JFreeChart jfreechart = new JFreeChart("Animación de un termómetro", JFreeChart.DEFAULT_TITLE_FONT, thermometerplot, true);
        thermometerplot.setInsets(new RectangleInsets(5D, 5D, 5D, 5D));
        thermometerplot.setPadding(new RectangleInsets(10D, 10D, 10D, 10D));
        thermometerplot.setThermometerStroke(new BasicStroke(2.0F));
        thermometerplot.setThermometerPaint(Color.lightGray);
        thermometerplot.setUnits(2);
        thermometerplot.setGap(4);
        return jfreechart;
	}
no le prestes atención a la función "funcion(x,A,tau)" solo sabe que devuelve un double que son los valores del termómetro entre 0 y el valor final

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:43.