Ver Mensaje Individual
  #3 (permalink)  
Antiguo 07/08/2013, 12:51
Avatar de adrianBenjuya
adrianBenjuya
 
Fecha de Ingreso: noviembre-2012
Mensajes: 20
Antigüedad: 11 años, 6 meses
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