display a chart in an existing window

A discussion forum for JFreeChart (a 2D chart library for the Java platform).
Locked
may

display a chart in an existing window

Post by may » Mon Nov 18, 2002 6:39 pm

hi,

· how can i display a chart in an existing (swing)window?
(i didn't find another way than creating a new frame containing my chart...)
· what exactly is the difference between a panel and a frame??

thanks for your help
may

Dave Gilbert

Re: display a chart in an existing window

Post by Dave Gilbert » Mon Nov 18, 2002 11:27 pm

You can place a ChartPanel anywhere in your user interface in the same way that you would use a JPanel.

Regards,

DG

Cláudio Sampaio (Patola)

Re: display a chart in an existing window

Post by Cláudio Sampaio (Patola) » Tue Nov 19, 2002 5:40 pm

I think I still have a problem with JFreeChart.

I reduced the problem to a single servlet which doesn't even access the database. Now there isn't any chance of being a multithreading problem - it is even called just one time. If i call it alone, it works ok. It also works if I call it with the 'wget' command. But if I call it through iText, it does not work. Normal pngs do work.

The actual code is the following:
------------------------------------------------------------------------
<imports ommitted>
public class Imagem extends HttpServlet {

static SimpleDateFormat dmy = new SimpleDateFormat("dd/MM/yyyy");
static SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

ServletOutputStream out = response.getOutputStream();

System.out.println("Executando PerformanceComparativaBrutaImagem...");

try
{

double [][] dados = new double [][] { {1.0} , {-2.0}, {3.0}, {-4.0}, {5.0}, {-6.0 } };
String [] series = new String [] { "Bananas", "Apples", "Oranges", "Pineapples", "Lasagnas", "Lemons" };
String [] categorias = new String[] { "" };
DefaultCategoryDataset ds = new DefaultCategoryDataset (dados);
ds.setSeriesNames(series);
ds.setCategories(categorias);

JFreeChart grafico = ChartFactory.createVerticalBarChart("teste","","",ds,true);
grafico.setBackgroundPaint(Color.white);

CategoryPlot plot = grafico.getCategoryPlot();

plot.setBackgroundPaint(Color.white);
plot.setVerticalLabels(true);

NumberAxis eixo = (NumberAxis)plot.getRangeAxis();
eixo.setStandardTickUnits(TickUnits.createIntegerTickUnits()); // Deixamos o eixo Y apenas com valores inteiros

Legend legenda = grafico.getLegend();
legenda.setAnchor(Legend.EAST);

response.setContentType("image/png");
response.setHeader("Content-Disposition", "inline; filename=\"" + "teste.png\"");


ChartUtilities.writeBufferedImageAsPNG(out, grafico.createBufferedImage(448,200));
out.close();
response.flushBuffer();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try
{
out.close();
} catch (IOException e)
{
System.err.println("Can't close!");
}
}

}

}
---------------------------------------------------------------------
when run, it yields these errors:

java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674)
at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764)
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:647)
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:656)
at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java:312)
at org.apache.catalina.connector.http.HttpResponseStream.write(HttpResponseStream.java:182)
at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java:286)
at com.jrefinery.chart.ChartUtilities.writeBufferedImageAsPNG(Unknown Source)
at com.jrefinery.chart.ChartUtilities.writeBufferedImageAsPNG(Unknown Source)
at br.com.ymf.NetReport.Servlets.Imagem.doGet(Imagem.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at br.com.ymf.NetReport.Filtros.FiltroAutenticadorCliente.doFilter(FiltroAutenticadorCliente.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)

Cláudio Sampaio (Patola)

Re: display a chart in an existing window

Post by Cláudio Sampaio (Patola) » Tue Nov 19, 2002 5:58 pm

I think I still have a problem with JFreeChart.

I reduced the problem to a single servlet which doesn't even access the database. Now there isn't any chance of being a multithreading problem - it is even called just one time. If i call it alone, it works ok. It also works if I call it with the 'wget' command. But if I call it through iText, it does not work. Normal pngs do work.

The actual code is the following:
------------------------------------------------------------------------
<imports ommitted>
public class Imagem extends HttpServlet {

static SimpleDateFormat dmy = new SimpleDateFormat("dd/MM/yyyy");
static SimpleDateFormat ymd = new SimpleDateFormat("yyyyMMdd");

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

ServletOutputStream out = response.getOutputStream();

System.out.println("Executando PerformanceComparativaBrutaImagem...");

try
{

double [][] dados = new double [][] { {1.0} , {-2.0}, {3.0}, {-4.0}, {5.0}, {-6.0 } };
String [] series = new String [] { "Bananas", "Apples", "Oranges", "Pineapples", "Lasagnas", "Lemons" };
String [] categorias = new String[] { "" };
DefaultCategoryDataset ds = new DefaultCategoryDataset (dados);
ds.setSeriesNames(series);
ds.setCategories(categorias);

JFreeChart grafico = ChartFactory.createVerticalBarChart("teste","","",ds,true);
grafico.setBackgroundPaint(Color.white);

CategoryPlot plot = grafico.getCategoryPlot();

plot.setBackgroundPaint(Color.white);
plot.setVerticalLabels(true);

NumberAxis eixo = (NumberAxis)plot.getRangeAxis();
eixo.setStandardTickUnits(TickUnits.createIntegerTickUnits()); // Deixamos o eixo Y apenas com valores inteiros

Legend legenda = grafico.getLegend();
legenda.setAnchor(Legend.EAST);

response.setContentType("image/png");
response.setHeader("Content-Disposition", "inline; filename=\"" + "teste.png\"");


ChartUtilities.writeBufferedImageAsPNG(out, grafico.createBufferedImage(448,200));
out.close();
response.flushBuffer();
}
catch (Exception e) {
e.printStackTrace();
}
finally {
try
{
out.close();
} catch (IOException e)
{
System.err.println("Can't close!");
}
}

}

}
---------------------------------------------------------------------
when run, it yields these errors:

java.net.SocketException: Broken pipe
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at org.apache.catalina.connector.ResponseBase.flushBuffer(ResponseBase.java:674)
at org.apache.catalina.connector.HttpResponseBase.flushBuffer(HttpResponseBase.java:764)
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:647)
at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java:656)
at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java:312)
at org.apache.catalina.connector.http.HttpResponseStream.write(HttpResponseStream.java:182)
at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java:286)
at com.jrefinery.chart.ChartUtilities.writeBufferedImageAsPNG(Unknown Source)
at com.jrefinery.chart.ChartUtilities.writeBufferedImageAsPNG(Unknown Source)
at br.com.ymf.NetReport.Servlets.Imagem.doGet(Imagem.java:93)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at javax.servlet.http.HttpServlet.service(HttpServlet.java)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at br.com.ymf.NetReport.Filtros.FiltroAutenticadorCliente.doFilter(FiltroAutenticadorCliente.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)

Cláudio Sampaio (Patola)

Re: display a chart in an existing window

Post by Cláudio Sampaio (Patola) » Tue Nov 19, 2002 7:00 pm

Sorry. I don't know what happened for this post to go here.

Locked