当前位置: 首页 > news >正文

LWUIT + ChartComponent 之一实现饼图(PieChart)

本文来自http://blog.csdn.net/hellogv/


本文源代码下载地址:http://download.csdn.net/source/872671
本文所用的Chart组件为J2me ChartComponent - ver 1.5.2,该组件的下载页面为http://www.beanizer.org/site/index.php/en/Software/J2me-ChartComponent-ver-1.5.html。按照官网所说, ChartComponent的二进制开发包可以用于个人开发以及商业项目,而源代码则需要购买,为了支持作者开发,最好是购买一份啦
ChartComponent,基于J2ME的LCDUI,而本文要演示的是,如何把ChartComponent运用到LWUIT之上,其他LCDUI的控件也可以参照这个方法,从而运作在LWUIT上
在LWUIT上实现Chart功能,可以利用LWUIT固有的组件,混合使用,效果挺好的,例如加入chart的每个图块说明(说明与图块颜色对应)时,可以用FlowLayout排列方式+Label控件,能够自适应,比用UI直接画省好多功夫。
  • 首先,先在主文件UIDemoMIDlet加入以下代码:
  1. /**
  2. *lcdui的图像转换为lwuit的图像
  3. */
  4. staticImagelcdui2lwuit(javax.microedition.lcdui.Imagelcdui_img)
  5. {
  6. //新建RGB数组
  7. int[]bufferArray=newint[lcdui_img.getWidth()*lcdui_img.getHeight()];
  8. //把lcdui的Image保存为RGB数组
  9. lcdui_img.getRGB(bufferArray,0,lcdui_img.getWidth(),0,0,lcdui_img.getWidth(),lcdui_img.getHeight());
  10. //********透明背景,可以省略*******************************************//
  11. for(inti=0;i<bufferArray.length;i++){
  12. if((bufferArray[i]&0x00FFFFFF)==0x00FFFFFF)//如果是背景
  13. bufferArray[i]=bufferArray[i]&0x00FFFFFF;
  14. }
  15. //********透明背景,可以省略*******************************************//
  16. //新建lwuit的Image,并读取RGB数组
  17. Imageresult=Image.createImage(bufferArray,lcdui_img.getWidth(),lcdui_img.getHeight());
  18. returnresult;
  19. }
  20. /**
  21. *RGB颜色转换为int
  22. */
  23. staticintRGBtoInt(intr,intg,intb)
  24. {
  25. Stringresult=Integer.toHexString(r)+Integer.toHexString(g)+Integer.toHexString(b);
  26. returnInteger.parseInt(result,16);
  27. }
  • 其次,编写PieChartDemo的代码,代码有详细的注释,非常好理解:
  1. /*
  2. *LWUIT+ChartComponent,实现多种图表
  3. *作者:张国威(咪当俺系噜噜)
  4. *本例实现的是“饼图”
  5. */
  6. packagecom.sun.lwuit.uidemo;
  7. importcom.sun.lwuit.Button;
  8. importcom.sun.lwuit.Command;
  9. importcom.sun.lwuit.Font;
  10. importcom.sun.lwuit.Form;
  11. importcom.sun.lwuit.Image;
  12. importcom.sun.lwuit.Label;
  13. importcom.sun.lwuit.events.ActionEvent;
  14. importcom.sun.lwuit.events.ActionListener;
  15. importcom.sun.lwuit.layouts.FlowLayout;
  16. importorg.beanizer.j2me.charts.ChartItem;
  17. importorg.beanizer.j2me.charts.PieChart;
  18. publicclassPieChartDemoimplementsActionListener{
  19. publicFormform=newForm("VBarChartDemo");
  20. privateCommandbackCommand=newCommand("Back",1);
  21. finalPieChartpieChart=newPieChart("");
  22. PieChartDemo()
  23. {
  24. //饼图说明
  25. Stringchart_str[]={"█A:你好吗","█B:早上好","█C:中午好","█D:晚上好","█E:吃宵夜","█F:睡懒觉"};
  26. //饼图颜色
  27. int[][]color={{0,0,200},{0,200,0},{50,15,30},{100,0,200},{0,200,100},{200,100,200}};
  28. //饼图范围
  29. int[]percent={15,10,5,20,34,16};
  30. //绘制柱体的说明
  31. initChartInfo(chart_str,color);
  32. intwidth=form.getWidth();
  33. intheight=form.getHeight()-60;
  34. Imageimg_hbarChart=drawPieChart(pieChart,width,height,"",color,percent);//绘制柱体图
  35. Buttonbutton=newButton(img_hbarChart);
  36. button.getStyle().setBgTransparency(1);//透明背景,会非常消耗资源,速度减慢,注意使用
  37. button.setBorderPainted(false);
  38. form.addComponent(button);
  39. form.addCommand(backCommand);
  40. form.setCommandListener(this);
  41. form.setLayout(newFlowLayout());//必须使用这种排列,FlowLayout最适合
  42. }
  43. privatevoidinitChartInfo(String[]chart_str,int[][]color)
  44. {
  45. for(inti=0;i<chart_str.length;i++)//循环
  46. {
  47. Labelchart_info=newLabel(chart_str[i]);
  48. chart_info.getStyle().setFgColor(UIDemoMIDlet.RGBtoInt(color[i][0],color[i][1],color[i][2]));
  49. form.addComponent(chart_info);
  50. }
  51. }
  52. privateImagedrawPieChart(ChartItemitem,
  53. intwidth,
  54. intheight,
  55. Stringimagefile,
  56. int[][]color,//柱体颜色
  57. int[]percent)//柱体长度(百分比)
  58. {
  59. item.setFont(Font.FACE_PROPORTIONAL,Font.STYLE_PLAIN,Font.SIZE_SMALL);
  60. item.setDrawAxis(true);
  61. item.setPreferredSize(width-80,width-80);//设置chart控件的大小,饼图必须width=height
  62. if(imagefile.length()>0)//需要使用背景时
  63. {
  64. try{
  65. javax.microedition.lcdui.Imageimg=javax.microedition.lcdui.Image.createImage(imagefile);//读取背景图
  66. item.setBackgroundImage(img);//设置背景图
  67. }catch(Exceptionex){ex.printStackTrace();}
  68. }
  69. item.showShadow(true);//使用阴影特效
  70. item.setShadowColor(20,20,20);//设置阴影颜色
  71. item.setColor(40,40,200);
  72. item.resetData();
  73. for(inti=0;i<color.length;i++)//循环绘画柱体
  74. {
  75. item.addElement(String.valueOf((char)('a'+i)),percent[i],color[i][0],color[i][1],color[i][2]);
  76. }
  77. item.setMaxValue(100);//柱体代表数值的显示范围,100%
  78. //这个是lcdui的Image
  79. javax.microedition.lcdui.Imagelcdui_img=
  80. javax.microedition.lcdui.Image.createImage(width,height);//饼图大小,图像>控件
  81. //这个是lcdui的Graphics
  82. javax.microedition.lcdui.Graphicslcdui_g=lcdui_img.getGraphics();
  83. pieChart.drawPie(lcdui_g,
  84. 40,//x
  85. 40,//y
  86. width-100,//宽
  87. width-100);//长,这里设置的大小必须比width,height小,才能完全显示
  88. returnUIDemoMIDlet.lcdui2lwuit(lcdui_img);
  89. }
  90. publicvoidactionPerformed(ActionEventarg0){
  91. if(arg0.getCommand()==backCommand)
  92. {
  93. UIDemoMIDlet.backToMainMenu();
  94. }
  95. }
  96. }


相关文章:

  • win10n网页如何保存为html,win10浏览器如何保存网页_win10浏览器怎么保存网页
  • 牛人(笑来)VS牛人(阿朱):惺惺相惜 - [读书,这么好的事儿]
  • 2021年湖南高考音体美成绩查询方式,2021年湖南高考成绩什么时候出来 公布时间...
  • itmo大学计算机专业,【俄罗斯圣光机大学访学】计算机学院ITMO交流访学团
  • LWUIT + ChartComponent 之二实现线形图(LineChart)
  • qt怎么添加html样式,Qt中插入html样式
  • LWUIT + ChartComponent 之三实现柱体图(HBarChar)
  • 辽宁省交通高等专科学校云计算机,辽宁省交通高等专科学校教务管理系统入口http://202.199.184.12/jwc/...
  • 诫子书
  • 怎么用计算机删除历史记录,win7计算机里搜索历史记录怎么删除
  • 谷歌跌出08年美国最值得信赖20大公司排行榜
  • 计算机课翻译成英语怎么说,计算机专业课程名英文翻译.doc
  • html文件怎么迭代,迭代多个文件并使用Beautiful Soup从HTML附加文本
  • Google Pack软件包中火狐浏览器被Chrome取代
  • 从指定网址读取html文件,获取指定网址下的html页面中的图片文件
  • 【Leetcode】104. 二叉树的最大深度
  • Android组件 - 收藏集 - 掘金
  • Angularjs之国际化
  • css选择器
  • Joomla 2.x, 3.x useful code cheatsheet
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • Terraform入门 - 1. 安装Terraform
  • 阿里云购买磁盘后挂载
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 前嗅ForeSpider采集配置界面介绍
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 一个SAP顾问在美国的这些年
  • 移动端唤起键盘时取消position:fixed定位
  • 在electron中实现跨域请求,无需更改服务器端设置
  • ​TypeScript都不会用,也敢说会前端?
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (145)光线追踪距离场柔和阴影
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (42)STM32——LCD显示屏实验笔记
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (译)计算距离、方位和更多经纬度之间的点
  • (原+转)Ubuntu16.04软件中心闪退及wifi消失
  • (转)关于多人操作数据的处理策略
  • (转载)跟我一起学习VIM - The Life Changing Editor
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .Net FrameWork总结
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • //解决validator验证插件多个name相同只验证第一的问题
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @NestedConfigurationProperty 注解用法
  • @property @synthesize @dynamic 及相关属性作用探究
  • [8-23]知识梳理:文件系统、Bash基础特性、目录管理、文件管理、文本查看编辑处理...
  • [Android Studio 权威教程]断点调试和高级调试
  • [Android]使用Android打包Unity工程
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [Asp.net mvc]国际化