2012-04-05 17 views
1

Problem: erlaubt mir renderBinary nicht. Die Methode renderBinary(InputStream) im Typ Controller gilt nicht für die Argumente (JFreeChart).Wie Rendern von JFreeChart in Play Framework

Ich habe diesen Controller:

public static void index() { 

    // create a dataset...Default 

    DefaultPieDataset dataset = new DefaultPieDataset(); 

    dataset.setValue("Category 1", 43.2); 
    dataset.setValue("Category 2", 27.9); 
    dataset.setValue("Category 3", 79.5); 

    // create a chart... 
    JFreeChart chart = ChartFactory.createPieChart(
      "Sample", 
      dataset, 
      true, 
      true, 
      false 
    ); 

    List<User> usersA = Department.getUsersA(); 
    List<User> usersB = Department.getUsersB(); 


    render(usersA, usersB, chart); 

} 

Antwort

3

Sie benötigen einen Img zurückkehren zu erstellen. JfreeChart ist kein Bild.

Außerdem müssen Sie einen einzelnen Controller erstellen, um das Image zurückzugeben. Sie können das Bild nicht in einem normalen Renderergebnis zurückgeben.

Sie hätten also einen Controller wie, renderChart (String chartId) {.... machen Sie das Diagramm ... renderBinary (img); }

Hier Code, der ein Bild von JFreeChart (von http://www.jfree.org/phpBB2/viewtopic.php?t=113)

JFreeChart chart = createChart(); 
... 
BufferedImage img = draw(chart, width, height); 
OutputStream out = response.getOutputStream(); 
JPEGImageEncoder encoder = 
JPEGCodec.createJPEGEncoder(out); 
JPEGEncodeParam param = 
encoder.getDefaultJPEGEncodeParam(img); 
param.setQuality(1.0f,true); 
encoder.encode(img,param); 
out.close(); 

protected BufferedImage draw(JFreeChart chart, int width, int height) 
{ 
BufferedImage img = 
new BufferedImage(width , height, 
BufferedImage.TYPE_INT_RGB); 
Graphics2D g2 = img.createGraphics(); 
chart.draw(g2, new Rectangle2D.Double(0, 0, width, height)); 
g2.dispose(); 
return img; 
} 
+0

und wenn ich whant ein Gantt-Diagramm erstellt? das kann kein Bild sein :( – Daniel

+0

Wenn Sie eine interaktive JFreeChart-Komponente in Ihrer Ansicht machen möchten, betrachten Sie Applets. (Und heutzutage würden die meisten Leute Javascript-Komponenten bevorzugen - vor ein paar Jahren Flash - ein paar Jahre davor Applets) - Obwohl ich in einer Firma gearbeitet habe, die (auch bis zu diesem Zeitpunkt) Java über den Applet-Mechanismus einsetzt: –

+0

danke :) beraten Sie sich? – Daniel