2011-07-23 17 views
0

有没有人在Coldfusion上实现JFreechart拨号图表的例子?JFreeChart在Coldfusion的拨号图表

由于

+0

如何为这方面的任何其他图不同拨号图表? ColdFusion在这方面与其他服务器有什么不同? – trashgod

+0

只是好奇,它必须是JFreeChart?因为您可以使用webcharts3D 在ACF下创建拨号图表@coldfusionjedi.com/index.cfm/2008/1/18/Coolest-CFCHART-Trick-Ever – Leigh

+0

@Leigh:我被CF卡服务器卡住了这个实例。CF7附带的WebCharts版本只支持拨号,而不是标准。 – lidbanger

回答

1

org.jfree.chart.demo具有如何构造的几个基本图表的例子的包装;点击课程名称查看源代码。 org.jfree.chart.ChartFactory的方法展示了如何构建更多。类org.jfree.chart.ChartUtilities包括以多种格式流化图表的方法。相应的response.setContentType()适用于任何servlet容器。

如果这是未知领域,我建议The JFreeChart Developer Guide

声明:与Object Refinery Limited无关;只是一个满意的客户和非常小的贡献者。

+0

优秀的建议。 +1 – Leigh

1

使用垃圾建议,我为CF7创建了一个非常基本的例子。你可以明显做更多与它。只需查看api和/或购买开发者指南即可。

Sample Dial Chart

安装: 下载最新的JFreeChart。将以下罐子复制到{cf_root}\WEB-INF\lib并重新启动CF. 请注意,jar版本号可能会有所不同。

  • 了JFreeChart 1.0.13.jar
  • jcommon-1.0.16.jar

样品:

<cfscript> 
// my chart settings 
chartTitle = "My Dial Chart"; 
arrowValue = 55; 
dialMinimum = 0; 
dialMaximum = 100; 
chartWidth = 500; 
chartHeight = 500; 

// initialize basic components of the chart 
// see jFreeChart API on how to customize the components settings further 
DefaultValueDataset = createObject("java", "org.jfree.data.general.DefaultValueDataset"); 
pointerValue = DefaultValueDataset.init(arrowValue); 
dialPointer  = createObject("java", "org.jfree.chart.plot.dial.DialPointer$Pointer").init(); 
dialFrame  = createObject("java", "org.jfree.chart.plot.dial.StandardDialFrame").init(); 
dialBackground = createObject("java", "org.jfree.chart.plot.dial.DialBackground").init(); 
// tweak the default range to make it more appealing. 
// see angle/extent: http://java.sun.com/developer/technicalArticles/GUI/java2d/java2dpart1.html 
dialScale = createObject("java", "org.jfree.chart.plot.dial.StandardDialScale").init(); 
dialScale.setLowerBound(dialMinimum); 
dialScale.setUpperBound(dialMaximum); 
dialScale.setStartAngle(-150); 
dialScale.setExtent(-240); 

//initialize plot and apply settings 
plot = createObject("java", "org.jfree.chart.plot.dial.DialPlot").init(); 
plot.setDialFrame(dialFrame); 
plot.setBackground(dialBackground); 
plot.setDataset(pointerValue); 
plot.addScale(0, dialScale); 
plot.addPointer(dialPointer); 

// create chart and convert it to an image 
chart = createObject("java", "org.jfree.chart.JFreeChart").init(chartTitle, plot); 
chartImage = chart.createBufferedImage(chartWidth, chartHeight); 
ImageFormat = createObject("java", "org.jfree.chart.encoders.ImageFormat"); 
EncoderUtil = createObject("java", "org.jfree.chart.encoders.EncoderUtil"); 
bytes = EncoderUtil.encode(chartImage, ImageFormat.PNG); 
</cfscript> 

<!--- display in browser ---> 
<cfcontent type="image/png" variable="#bytes#"> 
+0

伟大的工作Leigh – Antony

+0

@Antony - 谢谢。对于咧嘴笑,我玩弄了它。创建他们所称的MeterChart也不是太难。也可以发布那个例子) – Leigh

+0

@Leigh。这正好击中了头部。非常好! – lidbanger

2

(这可能不应该是一个独立的答案,但另一个已经很长了,所以我将它分开发布,以保持组织和易于查找。)

如果你正在寻找什么jFreeChart调用MeterChart,这里是一个快速和肮脏的图表类型的例子。

JFreeChart MeterChart

MeterChart代码:

<cfscript> 
    // my chart settings 
    chartTitle = "My Meter Chart"; 
    arrowValue = 55; 
    arrowUnits = "widgets"; 
    chartWidth = 500; 
    chartHeight = 500; 

    // initialize meter ranges (LOW, MEDIUM, HIGH) 
    // note: quick and ugly code in dire need of improvement ... 
    low = createSolidMeterInterval("Low", 0, 40, createAwtColor(0, 255, 0, 120)); 
    med = createSolidMeterInterval("Med", 40, 60, createAwtColor(255, 255, 0, 120)); 
    high = createSolidMeterInterval("High", 60, 100, createAwtColor(255, 0, 0, 120)); 

    // initialize arrow value 
    DefaultValueDataset = createObject("java", "org.jfree.data.general.DefaultValueDataset"); 
    meterPointer = DefaultValueDataset.init(arrowValue); 

    //initialize plot and apply settings 
    plot = createObject("java", "org.jfree.chart.plot.MeterPlot").init(); 
    plot.setDataset(meterPointer); 
    plot.setTickLabelsVisible(true); 
    plot.addInterval(low); 
    plot.addInterval(med); 
    plot.addInterval(high); 
    plot.setUnits(arrowUnits); 

    // create chart and convert it to an image 
    chart = createObject("java", "org.jfree.chart.JFreeChart").init(chartTitle, plot); 
    ChartUtilities = createObject("java", "org.jfree.chart.ChartUtilities"); 
    ChartUtilities.applyCurrentTheme(chart); 

    // applyCurrentTheme seems to overwrite some settings, so we must reapply them 
    Color = createObject("java", "java.awt.Color"); 
    plot.setBackgroundPaint(Color.GRAY); 
    plot.setNeedlePaint(Color.BLACK); 

    chartImage = chart.createBufferedImage(chartWidth, chartHeight); 
    ImageFormat = createObject("java", "org.jfree.chart.encoders.ImageFormat"); 
    EncoderUtil = createObject("java", "org.jfree.chart.encoders.EncoderUtil"); 
    bytes = EncoderUtil.encode(chartImage, ImageFormat.PNG); 
</cfscript> 
<!--- display in browser ---> 
<cfcontent type="image/png" variable="#bytes#"> 

辅助功能:

<cfscript> 
     // quick and ugly functions. could be improved ... 
     function createSolidMeterInterval(Title, fromValue, toValue, BgColor) { 
      var Range = createObject("java", "org.jfree.data.Range").init(arguments.fromValue, arguments.toValue); 
      var MeterInterval = createObject("java", "org.jfree.chart.plot.MeterInterval"); 
      return MeterInterval.init(arguments.Title, Range // interval from/to range 
             , javacast("null", "") // outline color 
             , javacast("null", "") // outline stroke 
             , arguments.BgColor // background color 
            ); 
     } 


     // using java.awt.Color is a pain due to all the javacasts ... 
     function createAwtColor(r, g, b, alpha) { 
      var color = createObject("java", "java.awt.Color"); 
      return color.init(javacast("int", arguments.r) 
           , javacast("int", arguments.g) 
           , javacast("int", arguments.b) 
           , javacast("int", arguments.alpha) // transparency 
          ); 
     } 
</cfscript>  
+0

+1很好的例子。 – trashgod