关于JFreeChart中柱状图使用纹理图片填充的解决办法

问题描述

前段时间,项目组有个业务需求,需要生成财务分析图表,开始采用的是FushionChart,因为这个简单,效果好看,功能也够强大,上线后不久,遇到了一个问题,就是用户需要将图表打印出来,没有彩色打印机,只有黑白打印机,所以光靠颜色来区分就很困难了。业务需求的老大对Excel挺熟的,他在Excel中画的图表是可以使用纹理填充的,黑白打印效果完全没问题。没有FunshionChart的源码,没办法改人家的东西,于是就找来了JFreeChart,可是这家伙好像也不支持使用纹理填充,网上搜了N久也没有现成的,倒是有和我们一样需求的人在问。没办法,只能自己先研究看看了,通过几天的百度,对JFreeChart有了大概的了解,知道了TexturePaint可以用来填充纹理,知道了BarRenderer可以对柱状图表进行修饰,通过代码跟踪,测试,终于试验成功了。主要代码如下,供有需要的人参考:privatestaticJFreeChartcreateChart(CategoryDatasetdataset){//createthechart...JFreeChartchart=ChartFactory.createStackedBarChart("BarChartDemo1",//charttitle"Category",//domainaxislabel"Value",//rangeaxislabeldataset,//dataPlotOrientation.VERTICAL,//orientationtrue,//includelegendtrue,//tooltips?false//URLs?);chart.setBackgroundPaint(Color.white);CategoryPlotplot=(CategoryPlot)chart.getPlot();NumberAxisrangeAxis=(NumberAxis)plot.getRangeAxis();rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());BarRendererrenderer=(BarRenderer)plot.getRenderer();renderer.setDrawBarOutline(true);renderer.setBarPainter(newTextureBarPainter());//这个是我自己实现的BarPainterrenderer.setSeriesPaint(0,getTexturePaint("1.png"));//.png是相应的纹理图片renderer.setSeriesPaint(1,getTexturePaint("2.png"));renderer.setSeriesPaint(2,getTexturePaint("3.png"));CategoryAxisdomainAxis=plot.getDomainAxis();domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI/6.0));returnchart;}privatestaticTexturePaintgetTexturePaint(StringtextureFile){BufferedImagebi=null;Rectangler=null;TexturePainttp=null;try{Filein=newFile("D:\texture\"+textureFile);bi=ImageIO.read(in);}catch(IOExceptione){e.printStackTrace();}r=newRectangle(0,0,bi.getWidth(),bi.getHeight());tp=newTexturePaint(bi,r);returntp;}//----------------------//TextureBarPainter主要代码publicvoidpaintBar(Graphics2Dg2,BarRendererrenderer,introw,intcolumn,RectangularShapebar,RectangleEdgebase){PaintitemPaint=renderer.getItemPaint(row,column);g2.setPaint(itemPaint);g2.fill(bar);}

解决方案

解决方案二:
运行效果图:
解决方案三:
[img=http://b59.photo.store.qq.com/http_imgload.cgi?/rurl4_b=9221724b03a323e0508bad38d8344c18beddbf16a355ebdcaaefac411f82d48023979cda8346b3d44ca973d66897e2ea41419c3550a20de163bd30c606ac31c297620df3ce47e8b926cf8bd46ee5b1713b4f799f&a=56&b=59][/img]
解决方案四:
该回复于2010-11-24 13:59:27被版主删除

时间: 2024-09-20 00:07:39

关于JFreeChart中柱状图使用纹理图片填充的解决办法的相关文章

IE浏览器图片不显示解决办法

  IE浏览器图片不显示解决办法 首先在电脑桌面,双击打开ie浏览器快捷打开方式.(如下图) 然后来到ie浏览器默认的主页,可以看到图片还是无法显示出来,先点击左上角菜单栏中的"工具".(如下图) 接着在工具菜单下弹出来的设置菜单中,选择"Internet 选项".(如下图) 来到Internet 选项窗口的常规设置页面,在点击上面菜单中的"高级".(如下图) 在高级设置的"多媒体"设置下面,如果看到"显示图片&qu

Winxp中无法安装新字体的终极解决办法

Winxp中无法安装新字体的终极解决办法 在windows 7越来越火的今天,相信还有很多朋友对XP系统情有独钟吧?北极鱼也算是一个了,主要是由于自己都很少使用安装版软件,电脑上基本上都是一些绿色软件.并且自己制作很多绿色软件都是在xp系统下测试绿化的,结果就导致部分绿色软件在windows 7下无法使用,再加上在运行速度已经习惯问题上感觉还是XP来的顺手,所以一直还在延续着XP的使用,(双系统,平时使用在XP下,玩玩就用windows 7), 一直来用的XP好好的,不过早些天,北极鱼也算是终于

getview()-android getView中 position=0多次出现的解决办法

问题描述 android getView中 position=0多次出现的解决办法 适配器中的getview @Override public View getView(int position, View convertView, ViewGroup parent) { View view = View.inflate(context,R.layout.home_item,null); TextView tv = (TextView) view.findViewById(R.id.homeIt

线程-关于Win32核心编程中DLL注入后无反应的解决办法

问题描述 关于Win32核心编程中DLL注入后无反应的解决办法 #include #include HINSTANCE hProcess; PWSTR pszLibFileRemote; HINSTANCE hThread; void StartInject(int ProcessID, char * DllName); void OverInject(char * DllName); void EnableDebugPrivilege(HANDLE processHandle); int ma

iOS9与XCode7中不能使用http连接的快速解决办法_IOS

在Xcode7.0及以上版本中编译iOS APP时,默认会使用iOS9的一项新特性,使得所有http连接被禁用,项目里使用的API没有https支持,就悲剧了.差了官方文档,有这么一段话 App Transport Security App Transport Security (ATS) enforces best practices in the secure connections between an app and its back end. ATS prevents accident

有关easyui-layout中的收缩层无法显示标题的解决办法_jquery

easyui-layout中的收缩层无法显示标题的问题原因分析: 在easyui-layout中设置面板初始化为可以折叠,然后就发现标题还有图标都木有了 嗯,就是结果列表上面.一片空白,出现了问题就要去解决它,在网上查了资料之后呢,决定修改jquery.easyui.min.js 版本为:jQuery EasyUI 1.4.1 在5105行有_39d方法,在其中设置两个变量_Cstitle,_CsIcon添加代码如下: var _Cstitle; var _closedTitle = p.pan

Javamail中的常见中文乱码问题与解决办法(综合)

解决|问题|中文|中文乱码 在使用javamail api开发邮件服务系统时,我们常常会碰到很多中文乱码问题,下面就分别介绍如何解决这些问题. 1.发送名称含中文的附件到邮件服务器,用别的邮件接收程序接收到的附件名显示为乱码 解决办法:在调用MimeBodyPart的setFileName()时使用Base64编码.例如: BASE64Encoder enc = new BASE64Encoder();//该类位于jre/lib/rt.jar中 //fds为FileDataSource实例 mb

在ASP中常见的错误80004005信息和解决办法

作者:BatMan错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)Microsoft OLE DB Provider for ODBC Drivers error '80004005'[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet databaseengine cannot open the file '(unknown)'. It is already opened exclusivelyby another

以前收集的一些资料---ASP中常见的错误80004005信息和解决办法

错误|解决 错误80004005信息处理方法(给小城写的,你好好找找把) 错误信息(错误信息我不用翻译成中文了把,呵呵,大家谅解)     Microsoft OLE DB Provider for ODBC Drivers error '80004005'     [Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database     engine cannot open the file '(unknown)'.