JFreeChart

8 respostas
brunobuild

Estou usando JSF.
Estou conseguindo mostrar o gráfico usando o primefaces, porém eu preciso fazer uma busca de acordo com um range de data.
e atualizar o gráfico.
Como eu faço para atualizar o gráfico que já está sendo exibido na tela?
Já fazem duas semanas que estou atrás disso e não consigo solucionar este problema.

:cry:

public StreamedContent chartPieGenerator(String title, List<ChartBean> list)
    {
        PiePlot piePlot;
        File chartFile;
        DefaultStreamedContent defaultStreamedContent;

        chartFile = new File(Converter.toString(System.currentTimeMillis() + title));

        try
        {
            JFreeChart jFreeChart = ChartFactory.createPieChart(title, this.createDataSetValor(list), true, true, false);
            piePlot = (PiePlot) jFreeChart.getPlot();
            piePlot.setBackgroundPaint(Color.WHITE);
                                                
            ChartUtilities.saveChartAsPNG(chartFile, jFreeChart, 400, 300);
            defaultStreamedContent = new DefaultStreamedContent(new FileInputStream(chartFile), "image/png");

            return defaultStreamedContent;
        }
        catch (IOException ex)
        {
            Logger.getLogger(ChartGenerator.class.getName()).log(Level.SEVERE, null, ex);
        }

        return new DefaultStreamedContent();
    }

    private PieDataset createDataSetValor(List<ChartBean> chartBeans)
    {
        int index = 0;
        DefaultPieDataset dataset;
        dataset = new  DefaultPieDataset();

        for(ChartBean chartBean : chartBeans)
        {
            dataset.insertValue(index++, chartBean.getLabel() + " = " + chartBean.getValue() + " %", chartBean.getValue());
        }

        return dataset;
    }

8 Respostas

fabricioempresa

Bom cara já fiz vários gráficos com jFreeChart e nunca ouvi falar sobre ataulizações de gráficos em tempo real
Tenta ver como você poderia atualizar ele em tempo real dentro de um periodo de 5 s tenta ver se você encontra algo nesse site
que existem bastante gráficos diferentes.

http://www.java2s.com/Code/Java/Chart/CatalogChart.htm

brunobuild

Cara esse site é muiiiiiiiiiiiiiiito show…

Mas na verdade não é em tempo real.

por exemplo eu tenho uma tela que quando carrega ela faz a estatistica de todos os dados da tabela, porém eu posso filtrar esses dados com um determinado range de datas.

seleciono as duas datas e clico no botão gerar novo gráfico por exemplo.

ele faz o refresh na página envia os parametros faz a busca certinha porém ele não está mudando o gráfico.

<a4j:commandLink action="#{PerformanceReconhecimento.updateCharts}" >
                                        <h:graphicImage value="images/icones/salvar.gif" style="boder : 0px;"/>
                                        <a4j:actionparam name="deParameter" value="#{PerformanceReconhecimento.bean.de}" assignTo="#{PerformanceReconhecimento.bean.de}"/>
                                        <a4j:actionparam name="ateParameter" value="#{PerformanceReconhecimento.bean.ate}" assignTo="#{PerformanceReconhecimento.bean.ate}"/>
                                        <a4j:support event="onclick" reRender="charts" />
                                    </a4j:commandLink>                                    

                                </h:panelGrid>
                                <rich:spacer width="20" height="1" />
                                <a4j:outputPanel id="charts">
                                    <h:panelGrid columns="2">                                        
                                        <p:graphicImage id="chartValor" value="#{PerformanceReconhecimento.chartValor}" />
                                        <p:graphicImage id="chartDataBoa" value="#{PerformanceReconhecimento.chartDataBoa}" />
                                    </h:panelGrid>
                                </a4j:outputPanel>
fabricioempresa

Sei la e se voce quando der o refresh voce faz com que a “janela” se feche e abra logo em seguida.

brunobuild

Eu já fiz isso mas não atualiza. fiz o refresh via ajax também mas não sei o que acontece. acho que não está criando uma nova imagem está ficando com a mesma criada na primeira vez

fabricioempresa

bah cara eu trabalho so com dektop msm nunca fiz nada para web tava te dando uma forca pq acho os graficos legais pra caramba so que no teu caso nao sei mais o que te dizer vlw.abraco

RenZasso

Salve brunobuild! firmeza? cara to com o mesmo problema cara, o grafico carrega e talz, porem quando tento gerar um novo e atualizar na pagina nao atualiza! fica o mesmo de antes…vc encontrou algo parcero?

vlw!

Marcelo_Bento

Aê cara… blz…

Homi tô com o mesmo problema que o seu… vc conseguiu solucionar.

Desde já agradeço a atênção.

Phalow

Marcelo_Bento

Aê galera… year… :smiley: consegui resolver.

Aqui fiz da seguinte forma…

PASSO 01 - tenho minha classe controller e nela criei um atributo temporário de sessão, uma lista. Toda vez que eu faço a pesquisa pra listar na tela, antes de retorna a consulta, seto o no meu atributo temporário, assim sempre fico com uma lista atualizada.

PASSO 02 - Na tela, usei o componente rich:tabPanel pra separar LISTA do GRÁFICO, cada um em uma aba diferente. Na aba do gráfico, coloquei switchType=“server” pra tova vez que eu for nesta aba ela fazer um recarregamento forçado.

Funfou :smiley: hehehehe

Abraço

Marcelo Bento
AutoNet Fortaleza

Criado 7 de abril de 2010
Ultima resposta 19 de ago. de 2010
Respostas 8
Participantes 4