当前位置: 首页 > 工具软件 > jCharts > 使用案例 >

jCharts用户指南翻译第三章 全部图表

公西俊民
2023-12-01

3.全部图表

   3.1输出图片

   编码

  经过编码器对象加载org.krysalis.jcharts.encoders包, jCharts输出下格式:PNG, JPEG, SVG这些编码器的每一个都有一个编码图表的方法:

  编码(Chart chart, OutputStream outputStream) –一个你能经过有这个方法的的任何输出流工具,例如文件输出流,普通的版本。

   PNGJPEG的支持是有 JSDK 1.4提供的。总之,你需要 JSDK 1.4去用 提供的jCharts t图片编码器。然而,现在有一个保留支持旧的JDK'sJPEGEncoder13类。

 SVG的支持是由 the Apache XML工程提供的:Batik。请访问:http://xml.apache.org/batik/

来自一个Servlet的图片

有一个帮助类,org.krysalis.jcharts.encoders.ServletEncoderHelper,另外,来自ServletsJSP的输出表。

在这个能输出jCharts支持格式的任何一个图片的类,有许多的方法,为浏览器增加了自动装入图表MIME类型有助于浏览器知道怎样正确的显示图片。

我不知道关于你的情况,但是我总是能强记不同文件格式的MIME类型。

提示:

一些用户尝试吧一个图表图片输出到磁盘然后通过流传回浏览器。这是没必要的!你可以利用上面提及的帮助类把图片由流输出到浏览器,将避免昂贵的文件输入输出。

备注:

这个帮助类之所以会产生因为可以避免依赖与J2EE jard的编译时间。如果你简单地在the xxxEncoder类上重载代码的方法,编译器会为每一个重载的注册试着加载所有涉及的类。

没有X Server的图片

JSDK 1.4+ 可以允许jCharts运行在一个虚拟存储缓冲区的一个headless*的空间上。在java命令行设置以下指定的属性:-Djava.awt.headless=true或者在你的代码里一个缺少弹性的位置:System.setProperty("java.awt.headless","true");

然而,如果你运行以前的JDK1.4,你不得不用一个虚拟存储缓冲区,如:xvfb

图表在Swing里应用

   你同样在一个Swing应用里面用jcharts。以下的代码来自org.krysalis.jcharts.demo.swing包的 SwingDemo类。这里,你简单地设置Swing组件的图形对象,变成图表和调用render()

 import org.krysalis.jcharts.chartData.ChartDataException;
 
 

import org.krysalis.jcharts.chartData.PieChartDataSet;

import org.krysalis.jcharts.properties.PropertyException;

import org.krysalis.jcharts.properties.PieChart2DProperties;

import org.krysalis.jcharts.properties.ChartProperties;

import org.krysalis.jcharts.properties.LegendProperties;

import org.krysalis.jcharts.nonAxisChart.PieChart2D;

 

import javax.swing.*;

import java.awt.*;

import java.awt.event.WindowEvent;

 

 

public class SwingDemo extends JFrame

{

  private JPanel panel;

 

 

  public SwingDemo() throws ChartDataException, PropertyException

  {

    initComponents();

  }

  private void initComponents() throws ChartDataException,PropertyException

  {

    this.setSize( 500, 500 );

    this.panel = new JPanel( true );

    this.panel.setSize( 500, 500 );

    this.getContentPane().add( this.panel );

    this.pieChart2DProperties = new PieChart2DProperties();

    this.legendProperties= new LegendProperties();

    this.chartProperties= new ChartProperties();

    this.setVisible( true );

    addWindowListener( new java.awt.event.WindowAdapter()

    {

      public void windowClosing( WindowEvent windowEvent )

      {

        exitForm( windowEvent );

      }

    }

    );

  }

 

 

  /************************************************************************

        *

        * @param graphics

        ***********************************************************************/

  public void paint( Graphics graphics )

  {

    try {

      String[] labels = {"BMW", "Audi", "Lexus"};

      String title = "Cars that Own";

      Paint[] paints = {Color.blue, Color.gray, Color.red};

      double[] data = {50d, 30d, 20d};

      PieChartDataSet pieChartDataSet = new PieChartDataSet( title, data,

                               labels, paints, this.pieChart2DProperties );

      Dimension dimension= this.panel.getSize();

      PieChart2D pieChart2D = new PieChart2D( pieChartDataSet,

                                              this.legendProperties,

                                              this.chartProperties,

                                              (int) dimension.getWidth(),

                                              (int) dimension.getHeight() );

 

       //***** BEGIN SWING SPECIFIC CODE *******************************

       pieChart2D.setGraphics2D( (Graphics2D) this.panel.getGraphics() );

       pieChart2D.render();

       //***** END SWING SPECIFIC CODE *********************************

    }

    catch( ChartDataException chartDataException ) {

      chartDataException.printStackTrace();

    }

    catch( PropertyException propertyException ) {

      propertyException.printStackTrace();

    }

  }

 

 

3.2图表标题

   显示一个标题

   你能有一个 DataSeries PieChartDataSet构造方法的一个参数显示你的图表的标题。在

 类似资料: