|
JFreeChart chart = ChartFactory.createVerticalBarChart3D(title, domain, range, dataset,true,true,false);
chart.setBackgroundPaint(new GradientPaint(0.0F, 0.0F, Color.white, 1000F, 0.0F, Color.red)); chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));
Font font=new Font("黑体",Font.TRUETYPE_FONT, 12);
StandardLegend legend = (StandardLegend) chart.getLegend(); legend.setItemFont(font);
CategoryPlot plot = (CategoryPlot)chart.getPlot(); plot.setForegroundAlpha(0.9F);
CategoryAxis domain_axis = plot.getDomainAxis(); domain_axis.setTickLabelFont(font);
ValueAxis value_axis=plot.getRangeAxis(); value_axis.setTickLabelFont(font);
| ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22155047.html
使用JFreeChart创建图象 文档性质: 转载 发表时间:2003-5-21 快速返回 作者:孤魂一笑(bingo_ge@hotmail.com) 日期:2003-05-08 一:jfreechart介绍 jfreechart是一个免费创建图片的java工具.可以创建如下图形: 饼图(pie charts;) 曲线图(line charts ) 柱状图(horizontal/vertical bar charts) 甘特图(Gantt charts; ) XY plots and scatter plots; time series, high/low/open/close charts and candle stick charts; combination charts; Pareto charts; bubble charts; wind plots, meter charts and symbol charts; 从以下地址可以看到jfreechart可以创建的图形类型 http://www.jfree.org/jfreechart/samples.html sourceforge有一个基于jfreechart的项目Cewolf可以很方便的在jsp/servlet中创建图片 jfreechart目前(2003-05-08)版本为0.98 希望得到详细的信息或下载jfreechart请访问如下站点: http://www.jfree.org/jfreechart/
二:特别说明: jfreechart是一个开源项目,但是文档是需要40美金去购买的。 还有一个很重要的问题,jfreechart如果使用中文,他使用的默认字体 显示出来的中文会很模糊,你可能需要修改源代码。 下面我就举几个简单的例子说明一下如何使用jfreechart创建图片 在开发中有可能会导入以下的类 import com.jrefinery.chart.ChartFactory; import com.jrefinery.chart.ChartUtilities; import com.jrefinery.chart.JFreeChart; import com.jrefinery.chart.TextTitle; import com.jrefinery.chart.axis.NumberAxis; import com.jrefinery.chart.plot.CategoryPlot; import com.jrefinery.chart.plot.PiePlot; import com.jrefinery.data.Day; import com.jrefinery.data.DefaultCategoryDataset; import com.jrefinery.data.DefaultPieDataset; import com.jrefinery.data.TimeSeries; import com.jrefinery.data.TimeSeriesCollection; import com.jrefinery.data.TimeSeriesDataPair; 在0.98以后包由com.jrefinery.*改变为:org.jfree
三:创建饼图 //图片标题 String title = "空调2002年市场占有率"; //设定数据源 DefaultPieDataset piedata = new DefaultPieDataset(); //第一个参数为名称,第二个参数是double数 piedata.setValue("联想", 27.3); piedata.setValue("长城", 12.2); piedata.setValue("海尔", 5.5); piedata.setValue("美的", 17.1); piedata.setValue("松下", 9.0); piedata.setValue("科龙", 19.0); //创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式 JFreeChart chart = ChartFactory.createPieChart(title, piedata, true, true, true); //设定图片标题 chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15))); //chart.addSubtitle(new TextTitle("2002财年分析", new Font("隶书", Font.ITALIC, 12))); //设定背景 chart.setBackgroundPaint(Color.white); //chart.s //饼图使用一个PiePlot PiePlot pie = (PiePlot)chart.getPlot(); //pie.setSectionLabelType(PiePlot.NAME_AND_PERCENT_LABELS); pie.setSectionLabelType(PiePlot.NAME_AND_VALUE_LABELS); //设定显示格式(名称加百分比或数值) pie.setPercentFormatString("#,###0.0#%"); //设定百分比显示格式 pie.setBackgroundPaint(Color.white); pie.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12)); //设定背景透明度(0-1.0之间) pie.setBackgroundAlpha(0.6f); //设定前景透明度(0-1.0之间) pie.setForegroundAlpha(0.90f); //输出文件到指定目录 String rfname = MathUtil.getRoundCode(12) + ".jpeg"; String fileName = "d:/test/" + rfname; try { //可以保存文件为jpg或png格式。 ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600); //第一个参数为文件名 //第二个参数质量 //第三个参数为哪个chart创建图片 //第四个宽度 //第五个高度 } catch (IOException exz) { System.out.print("....Cant’t Create image File"); }
其实使用JFreeChart创建图片很简单,不同的的图片类型区别在于设置数据集
四:创建曲线图 // create a default chart based on some sample data... //曲线图标题 String title = "趋势分析"; //曲线图X轴提示 String domain = "月份走势"; //曲线图Y轴提示 String range = "应收余额"; //曲线图自标题 String subtitleStr = "2003财年分析"; //创建时间数据源 //每一个TimeSeries在图上是一条曲线 TimeSeries ca = new TimeSeries("用友"); for (int i = 1999; i < 2005; i++) { for (int mon = 0; mon < 12; mon++) { //ca.add(new Month(mon + 1, i), new Double(500 + Math.random() * 100)); //TimeSeriesDataPair是一个时间点的数值体现 ca.add( new TimeSeriesDataPair( new Day(1, mon + 1, i), new Double(500 + Math.random() * 100))); } }
TimeSeries ibm = new TimeSeries("金碟"); for (int i = 1999; i < 2005; i++) { for (int mon = 0; mon < 12; mon++) { //ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100)); ibm.add( new TimeSeriesDataPair( new Day(1, mon + 1, i), new Double(400 - Math.random() * 100))); } }
TimeSeries king = new TimeSeries("东软"); for (int i = 1999; i < 2005; i++) { for (int mon = 0; mon < 12; mon++) { //ibm.add(new Month(mon+1,i),new Double(400-Math.random()*100)); king.add( new TimeSeriesDataPair( new Day(1, mon + 1, i), new Double(300 - Math.random() * 100))); } } //时间曲线数据集合 TimeSeriesCollection dataset = new TimeSeriesCollection(); dataset.addSeries(ca); dataset.addSeries(ibm); dataset.addSeries(king); //dataset.addSeries(jpy); //dataset.addSeries(mav); //时间曲线元素 JFreeChart chart = ChartFactory.createTimeSeriesChart( title, domain, range, dataset, true, true, false); // then customise it a little... TextTitle subtitle = new TextTitle(subtitleStr, new Font("黑体", Font.BOLD, 12)); chart.addSubtitle(subtitle); chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15))); //pie.setSeriesLabelFont(new Font("黑体", Font.BOLD, 15)); chart.setBackgroundPaint( new GradientPaint(0, 0, Color.white, 0, 1000, Color.blue)); //sysout //输出文件到指定目录 String rfname = MathUtil.getRoundCode(22) + ".jpeg"; String fileName = "d:/test/" + rfname; try { //for //System.out.println(); ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600); // log.info("....Create image File:" + fileName); } catch (IOException exz) { System.out.print("....Cant’t Create image File"); }
五:创建柱状图 String title = "柱状图测试"; String domain = "单位比较"; String range = "数值"; //CategoryDataset data = DemoDatasetFactory.createCategoryDataset(); DefaultCategoryDataset data = new DefaultCategoryDataset(); for (int r = 0; r < 5; r++) { String rowKey = "单位 [" + (r + 1)+"]" ; //第一层循环:分析对象 for (int c = 0; c < 6; c++) { //第二层循环:分析对象在时间点上的数据 String columnKey = "2001年" + (c + 1) + "月"; data.addValue(new Double(r * c + 5), rowKey, columnKey); } }
JFreeChart chart = ChartFactory.createVerticalBarChart( title, domain, range, data, true, true, false); // then customise it a little... chart.setBackgroundPaint( new GradientPaint(0, 0, Color.white, 1000, 0, Color.red)); chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15))); CategoryPlot plot = (CategoryPlot)chart.getPlot(); plot.setForegroundAlpha(0.9f); plot.setValueLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12)); //plot.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12)); //注意以下代码 NumberAxis verticalAxis = (NumberAxis)plot.getRangeAxis(); verticalAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); // 输出文件到指定目录 String rfname = MathUtil.getRoundCode(22) + "b.jpeg"; String fileName = "d:/test/" + rfname; try { ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600); // log.info("....Create image File:" + fileName); } catch (IOException exz) { System.out.print("....Cant’t Create image File"); }
六:结束语 个人感觉JFreeChart可以满足大部分图片创建的需要,美中不足的是:对字体的设置做的 不够好,特别是使用中文的时候字体很不清晰。因为这个原因建议你自己去修改他的源代码 最好使用properties文件去设置字体.还有就是文档要钱所以要多花点时间去看源代码。或多 上社区.因为时间等原因我只介绍了三种图片的创建,其他类型的图片可以参考jfreechart提 供的例子。
| ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22154859.html
现在我们有了一个很不错的欢迎屏幕,它可以通过点击的方法关闭,但它不会自己消失。接下来我们要加入代码,使得欢迎屏幕在显示一定的时间之后自动消失。这里我们要考虑到运用线程。
class SplashWindow3 extends JWindow { public SplashWindow3(String filename, Frame f, int waitTime) { super(f); JLabel l = new JLabel(new ImageIcon(filename)); getContentPane().add(l, BorderLayout.CENTER); pack(); Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize(); Dimension labelSize = l.getPreferredSize(); setLocation(screenSize.width/2 - (labelSize.width/2), screenSize.height/2 - (labelSize.height/2)); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { setVisible(false); dispose(); } }); final int pause = waitTime; final Runnable closerRunner = new Runnable() { public void run() { setVisible(false); dispose(); } }; Runnable waitRunner = new Runnable() { public void run() { try { Thread.sleep(pause); SwingUtilities.invokeAndWait(closerRunner); } catch(Exception e) { e.printStackTrace(); // 能够捕获InvocationTargetException // 能够捕获InterruptedException } } }; setVisible(true); Thread splashThread = new Thread(waitRunner, "SplashThread"); splashThread.start(); } } | 这里的基本思路是利用一个在一定时间内暂停等待的Thread对象。在上面的代码中,线程的暂停时间是4秒。当这个线程唤醒时,它将关闭欢迎屏幕。由于Swing是非线程安全的,除非代码在事件分派线程上执行,否则它就不应该影响任何UI组件的状态。所谓事件分派线程,就是Swing中负责绘图和事件处理的线程。
为了解决这个问题,Swing设计者赋予我们安全地把Runnable对象加入UI事件队列的能力。在本例中,我们用可运行对象closerRunner完成最关键的工作。我们把可运行对象传入SwingUtilities.invokeAndWait()静态方法,然后wingUtilities.invokeAndWait()进行所有未完成的UI操作,并执行传递给该方法的可运行对象closerRunner的run方法。通过运用一个独立的线程负责欢迎屏幕的关闭操作,应用担负起了显示和关闭欢迎屏幕之间的所有操作。
如果要让欢迎屏幕总是显示且用户不能关闭它,你必须删除那些隐藏欢迎屏幕的代码。如果要让欢迎屏幕只能由用户手工关闭,你可以象使用任何其他JWindow对象一样调用SplashWindow3对象上的setVisible(false)和dispose()方法。
| ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22125464.html
几乎所有时髦的应用都有一个欢迎屏幕。欢迎屏幕既是宣传产品的方法之一,而且在长时间的应用启动过程中,欢迎屏幕还用来表示应用正在准备过程中。
下面是一个最简单的欢迎屏幕实现:
class SplashWindow1 extends JWindow { public SplashWindow1(String filename, Frame f) { super(f); JLabel l = new JLabel(new ImageIcon(filename)); getContentPane().add(l, BorderLayout.CENTER); pack(); Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize(); Dimension labelSize = l.getPreferredSize(); setLocation(screenSize.width/2 - (labelSize.width/2), screenSize.height/2 - (labelSize.height/2)); setVisible(true); screenSize = null; labelSize = null; } } | SplashWindow1类从Swing的JWindow派生。JWindow是一个容器,它没有其他窗口所具有的各种窗口元素,如标题条、窗口管理按钮,甚至连突出显示的边框也没有。因此,JWindow对于制作欢迎屏幕来说是非常合适的。上面的代码假定图形文件在当前目录。图形通过ImageIcon装入内存,然后它就被放到了JWindow的中心。接着,窗口被pack(),这使得Swing把窗口调整到适当的大小,最后窗口被移到了屏幕的中心。
如果我们运行上面的程序,可以发现虽然欢迎画面确实出现在屏幕中央,但遗憾的,它却不会关闭!要关闭欢迎画面,我们需要加入更多的代码:
class SplashWindow2 extends JWindow { public SplashWindow2(String filename, Frame f) { super(f); JLabel l = new JLabel(new ImageIcon(filename)); getContentPane().add(l, BorderLayout.CENTER); pack(); Dimension screenSize =Toolkit.getDefaultToolkit().getScreenSize(); Dimension labelSize = l.getPreferredSize(); setLocation(screenSize.width/2 - (labelSize.width/2), screenSize.height/2 - (labelSize.height/2)); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent e) { setVisible(false); dispose(); } }); setVisible(true); } } | 和原先的SplashWindow1类相比,这个SplashWindow2类唯一的区别在于多出了一个安装到JWindow上的匿名MouseListener。经过这个改动之后,用户可以点击欢迎屏幕关闭它。 | ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22125419.html
很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作的功能。在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。下表节选一段具有该功能的HTML代码
<MAP NAME="chartMap"> <AREA SHAPE="RECT" COORDS="81,15,126,254" href="?series=0&category=100" title="100 = 7,048" onclick="javascript:clickChart('100');return false;"> <AREA SHAPE="RECT" COORDS="143,27,188,255" href="?series=0&category=200" title="200 = 6,721" onclick="javascript: clickChart ('200');return false;"> <AREA SHAPE="RECT" COORDS="205,54,250,255" href="?series=0&category=300" title="300 = 5,929" onclick="javascript: clickChart ('300');return false;"> <AREA SHAPE="RECT" COORDS="267,85,312,255" href="?series=0&category=400" title="400 = 5,005" onclick="javascript: clickChart ('400');return false;"> <AREA SHAPE="RECT" COORDS="329,17,374,255" href="?series=0&category=Diet" title="Diet = 7,017" onclick="javascript: clickChart ('Diet');return false;"> </MAP> |
由此就产生了一个问题:如果根据一个图像来生成对应的MAP对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是ChartFactory. createBarChart3D方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示(tooltip)以及是否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性。
可是我想知道的是怎么来产生这个MAP啊!哈哈,不要着急,JFreeChart已经帮我们做好生成MAP对象的功能。为了生成MAP对象就要引入另外一个对象:ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生成MAP数据,它需要一个中间对象来过渡,这个对象就是ChartRenderingInfo。下图是生成MAP数据的流程图:
图7

如上图所示,ChartUtilities类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下:首先创建一个ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象,有了这个对象我们还是没有办法获取具体的MAP数据,我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来,获取MAP数据的代码片断如下:
PrintWriter w = null; FileOutputStream fos_jpg = null; FileOutputStream fos_cri = null; try{ //根据不同类型的图表使用不同类,以下是针对饼图的操作 PiePlot plot = (PiePlot) chart.getPlot(); plot.setURLGenerator(new StandardPieURLGenerator(url)); //设置工具提示 plot.setToolTipGenerator(new StandardPieToolTipGenerator()); fos_jpg = new FileOutputStream(“d:\\fruit.jpg”); ChartUtilities.writeChartAsJPEG( fos_jpg, 100, chart, 400, 300, info); fos_cri = new FileOutputStream(__d:\\fruit.map__); w = new PrintWriter(fos_cri); ChartUtilities.writeImageMap(w, __mapname__, info); w.flush(); }finally{ try{ w.close(); }catch(Exception e){} try{ fos_cri.close(); }catch(Exception e){} try{ fos_jpg.close(); }catch(Exception e){} } |
打开文件D:\fruit.map,文件的内容就是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文件写到页面上即可完成热点图表的功能。至于怎么结合两者之间的关系例如图像的useMap属性值必须与MAP对象的名称结合起来,必须根据实际的应用情况进行相应的处理。笔者建议把二者通过标签库封装起来,图像文件的名称以及MAP对象的名称由标签库统一进行控制,这样可以保证二者的一致性。
关于作者 刘冬,他已经不再叫凤梨罐头了。珠海市创我科技发展有限公司软件工程师,主要从事在J2EE平台上实现商业智能(BI)方面的开发。 联系电话:0756-3377435-383 电子邮件: winter.lau@163.com
| ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22125000.html
· 2 饼图
对于饼图而言,数据集的获取用的不是同一个数据集类,另外饼图不支持同一个类别的项目中还有子项目这样的数据。我们只给出创建饼图的代码,至于写图表到一个文件则与柱状图一致,无需重复。
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*; import org.jfree.chart.*; /** * 用于演示饼图的生成 * @author Winter Lau */ public class PieChartDemo {
public static void main(String[] args) throws IOException{ DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题 data, true, // 是否显示图例 false, false ); //写图表对象到文件,参照柱状图生成源码 } /** * 获取一个演示用的简单数据集对象 * @return */ private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setValue("荔枝",500); return dataset; } } |
生成的饼图文件效果如下:
图6

将生成的图表移到浏览器上 为了将生成的图表直接传给客户端浏览器,只需要将前面两个例子中的文件流换成是通过HttpServletResponse对象获取到的输出流,详细代码清单如下:
package lius.chart.demo;
import java.io.IOException; import javax.servlet.*; import javax.servlet.http.HttpServlet;
import org.jfree.data.*; import org.jfree.chart.*; /** * 演示通过servlet直接输出图表 * @author Winter Lau */ public class ChartDemoServlet extends HttpServlet {
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException { res.setContentType("image/jpeg"); DefaultPieDataset data = getDataSet(); JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", data, true, false, false );
ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 100,chart,400,300,null); } /** * 获取一个演示用的简单数据集对象 * @return */ private static DefaultPieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("苹果",100); dataset.setValue("梨子",200); dataset.setValue("葡萄",300); dataset.setValue("香蕉",400); dataset.setValue("荔枝",500); return dataset; } } | | ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22124929.html
关于jfreechart的介绍和配置部分就省去。
下面我们来介绍JFreeChart中几个核心的对象类:
类名 |
类的作用以及简单描述 |
JFreeChart |
图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象 |
XXXXXDataset |
数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类 |
XXXXXPlot |
图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持 |
XXXXXAxis |
用于处理图表的两个轴:纵轴和横轴 |
XXXXXRenderer |
负责如何显示一个图表对象 |
XXXXXURLGenerator |
用于生成Web图表中每个项目的鼠标点击链接 |
XXXXXToolTipGenerator |
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类 |
· 使用JFreeChart生成各种样式的图表
限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。
· 1 柱状图
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*; import org.jfree.chart.*; import org.jfree.chart.plot.*; /** * 该类用于演示最简单的柱状图生成 * @author Winter Lau */ public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2(); JFreeChart chart = ChartFactory.createBarChart3D( "水果产量图", // 图表标题 "水果", // 目录轴的显示标签 "产量", // 数值轴的显示标签 dataset, // 数据集 PlotOrientation.VERTICAL, // 图表方向:水平、垂直 true, // 是否显示图例(对于简单的柱状图必须是false) false, // 是否生成工具 false // 是否生成URL链接 );
FileOutputStream fos_jpg = null; try { fos_jpg = new FileOutputStream("D:\\fruit.jpg"); ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null); } finally { try { fos_jpg.close(); } catch (Exception e) {} } } /** * 获取一个演示用的简单数据集对象 * @return */ private static CategoryDataset getDataSet() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, null, "苹果"); dataset.addValue(200, null, "梨子"); dataset.addValue(300, null, "葡萄"); dataset.addValue(400, null, "香蕉"); dataset.addValue(500, null, "荔枝"); return dataset; } /** * 获取一个演示用的组合数据集对象 * @return */ private static CategoryDataset getDataSet2() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(100, "北京", "苹果"); dataset.addValue(100, "上海", "苹果"); dataset.addValue(100, "广州", "苹果"); dataset.addValue(200, "北京", "梨子"); dataset.addValue(200, "上海", "梨子"); dataset.addValue(200, "广州", "梨子"); dataset.addValue(300, "北京", "葡萄"); dataset.addValue(300, "上海", "葡萄"); dataset.addValue(300, "广州", "葡萄"); dataset.addValue(400, "北京", "香蕉"); dataset.addValue(400, "上海", "香蕉"); dataset.addValue(400, "广州", "香蕉"); dataset.addValue(500, "北京", "荔枝"); dataset.addValue(500, "上海", "荔枝"); dataset.addValue(500, "广州", "荔枝"); return dataset; } } |
程序运行结束后生成的图片文件效果如下图所示:
图4

如果是使用简单的数据即使用getDataSet方法获取数据集时产生的图片文件如下:
图5
 | ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/22124837.html
一般在使用ejb时都是从创立J2EE项目的application项中依次创建application,ejb,web三项,其中: appliction是用来作为j2ee部署时使用的。 ejb就是创建ejb组件。 web就是一个web服务的容器,包括hrml,jsp,servlet,struts等。 在myeclipse中使用EJB的两种方法: 1)选择J2EE1.3则可以通过xDoclet来根据app_bean来生成app,home,session,apputil等。 2)选择J2EE1.4的就需要自己写app,home,sesion等程序代码。 对于整个程序以后的运行过程都是以JNDI为主线的展开,要注意: 一般要以home中的jndi-name为标准,具体在使用xdoclet的j2ee1.3时参看相关的帮助。 配置主要在:weblogic-ejb-jar.xml和ejb-jar.xml的jndi的设置。(这一般是针对于在同一服务器内部的jndi的调用,而对于其他外部情况,需要设置ervirament,权限等问题后才能进行lookup) 由于在服务器等各方面的原因,在部署之前要注意几个配置文件的正确的位置: 1) weblogic-ejb-jar.xml和ejb-jar.xml要在XXXEJB/src/meta-inf下,可以通过在不同的目录下导入。 2) web.xml和weblogic.xml要在XXXWeb/webRoot/web-inf下,可以weblogic.xml直接用别的程序的,web.xml需要自己根据需要来配置。 最后在部署之前,要对整个application server的三项进行项目清理,然后部署到服务器上。 | ( 浏览全文 引用此文) 文章来源: http://www.blogcn.com/user28/reene/blog/21696707.html
|