工作过程中用到jfreechart输出两个图形,一个是柱状图,一个是曲线图。整理一下用到的几个点。
1. 创建chartpanel,之前在swt中使用jfreechart需要使用SWT_AWT进行swt和awt的桥接①。现在jfreechart中已经有直接在swt上创建的方式,类名ChartComposite②。对于第1种方式有个鼠标双击事件响应的优点。
ChartPanel chartPanel = new ChartPanel(chart, false);
Frame frame = SWT_AWT.new_Frame(this);
frame.add(chartPanel);
chartPanel.addChartMouseListener(new ChartMouseListener(){});
这里可以通过if(2 == event.getTrigger().getClickCount())进行双击相应。
第2种方式的优点是可以将chartComposite直接当作swt中的composite,实质上也正是如此。在本文中,采用第二种方式。
2. Tooltips,如果要在chart上显示tooltips,有两个地方需要设置,1在创建jfreechart时设置该chart是否产生tooltips。2在构造chartComposite时,设置是否显示tooltips。注意chartcomposite有几个重载的构造函数。
3. 界面语言本地化,在中文环境需要用
// 界面语言本地化
if (Platform.getNL().contains("zh"))
{
domainAxis.setTickLabelFont(new Font("宋体", Font.ITALIC, 12));
if (label != null)
{
domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 14));
}
label = rangeAxis.getLabel();
if (label != null)
{
rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 15));
}
TextTitle title = chart.getTitle();
if (title != null)
{
title.setFont(new Font("黑体", Font.BOLD, 18));
}
}
4. 如果想知道鼠标双击或是单击时,单击点对应的数据,在mouseEvent的listener处理,如果是CategoryPlot。可用
JFreeChart chart = event.getChart();
CategoryPlot plot = (CategoryPlot)chart.getPlot();
Comparable<?> columnKey = plot.getDomainCrosshairColumnKey();
如果是XYPlot,可用
XYItemEntity en1 = (XYItemEntity)entity;
finalint itemNum = en1.getItem();
XYSeriesCollection dataset2 = (XYSeriesCollection)en1.getDataset();
XYSeries series = dataset2.getSeries(0);
XYDataItem dataItem = series.getDataItem(itemNum);
double xValue = dataItem.getXValue();
5. ChartComposite不能相应MouseDoubleClicked事件,需要继承类,覆盖该方法。可以研究拷贝chartComposite中的mouseDown(event)的处理方式。记得,在该方法最后转为awtMouseEvent时,参考org.jfree.experimental.swt.SWTUtils.toAwtMouseEvent方式将鼠标点击次数变为2。
6. 上下文菜单。参考chartComposite的构造,可知chartComposite本身带有上下文菜单,可以选择显示哪些菜单项。也可以添加自定义的菜单项。参考chartComposite中菜单的创建方式,在子类中覆盖createPopupMenu(),添加自己菜单项。同时,需要重载displayPopupMenu(int x, int y)控制自定义菜单项的可用性,如果进一步,不可用的菜单项令其不显示出来,那么需要将createPopupMenu()重载的更彻底,每次display前需要重新创建。
7. 鼠标位置与数据不对应。扩展的ChartComposite(或其本身,没试过),在窗口大小改变时,有时当鼠标点击或是悬浮时,不能显示tooltip,而且点击某个series的item数据,并不能得到这个数据。这是窗口大小改变后,鼠标位置和数据对应出现问题。查看mouseDown(event),在根据(x,y)找对应的entity时,传入的是通过event[x,y]变换出的[x,y],存在问题,令其传入[event.x,event.y]则能正确找出鼠标对应的entity。以上实验是通过拖拽chartComposite的宽度得出的。不能显示tooltip的原因也是如此。通过重载getToolTipText(MouseEvent e),改变传入EntityCollection找entity的参数[event.x,event.y]能达到显示效果。
8. Jfreechart的ChartRenderingInfo。在info中表明,chart由一系列的entity组成。一个简单XY的图形,包括2个titleEntity,2个AxisEntity,1个jfreechartEntity,1个PlotEntity(图形中除去XYItemEntity全部都是它的区域),若干个XYItemEntity(如果是菱形块表示图上的数据,那么这个entity就是那个图形对应的部分)。找entity,将从数据Entity找起。
9. 对于菱形块图形数据用awt的Path2D的Double表示,Double标出4个顶点的位置,判断鼠标【x,y】,是否点在菱形块中。
相关推荐
JFreeChart 是一个广泛使用的 Java 图形库,它提供了丰富的图表类型,包括饼图、柱状图、线图、散点图等,使得开发者能够在 Java 应用程序中方便地创建高质量的图表。"jfreechart1.0.3-demo-src" 是 JFreeChart ...
jfreechart-0.9.21的jar包和jfreechart-0.9.21-demo
struts2-jfreechart-plugin-2.1.8.1.jar
这个压缩包“jfreechart-1.0.13”包含了JFreeChart的完整版本,让我们一起深入探讨其核心功能和使用方法。 JFreeChart是Java中最优秀的绘图工具之一,它支持多种图表类型,包括折线图、柱状图、饼图、散点图、甘特...
struts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jarstruts2-jfreechart-plugin-2.0.11.jar
**JFreeChart——一款强大的Java图表库** JFreeChart是一款广泛使用的开源Java库,它能够帮助开发者...通过学习和实践`jfreechart--demo`中的示例,开发者可以快速掌握JFreeChart的使用,进一步提升数据可视化的技能。
在1.0.14版本中,其提供的`jfreechart-1.0.14-demo.jar`是一个演示程序,展示了库的各种功能。而`jfreechart-1.0.14.zip`则包含了这个演示程序对应的源代码,对于开发者来说,这是一个宝贵的资源,可以深入理解图表...
2. **jfreechart-1.0.19-fx-javadocs.zip**:这是JavaFX版的API文档,包含了JFreeChart在JavaFX环境下的详细接口和类的描述,是开发JavaFX应用时使用JFreeChart的重要参考。 3. **jfreechart-1.0.19.zip**:这是...
"jfreechart-1.0.6-demo"源码是了解和学习JFreeChart的重要资源,通过阅读和分析源码,开发者不仅可以掌握JFreeChart的基本用法,还能深入理解其设计思想,从而在实际项目中更灵活地应用图表功能。 在后续的学习中...
jfreechart-1.0.19压缩包中有一个jfreechart-1.0.19-demo.jar,里面演示了各种图表的制作案例,包括BarChart、LineChart、PieChart、TimeSeriesChart、XYSeries等等,共309个例子,现开放源码,请各位下载,欢迎交流...
"jfreeChart---DEMO"是一个很好的实例,展示了如何利用JFreeChart在Java Web环境中创建动态的折线图。通过Servlet封装数据并传递给JSP,我们可以实现数据驱动的图表更新,这对于实时监控、数据分析等场景非常有用。...
包含 jfreechart-1.0.19-demo.jar(java 环境下点击就可以查看) 包含jar包 jfreechart-1.0.19.jar,jfreechart-1.0.19-swt.jar,jcommon-1.0.23.jar,junit-4.11等,具体项目中需要哪些jar 包 ...
jfreechart-1.0.14-swt.jar
在“jfreechart--类说明”中,我们将探讨JFreeChart的核心类及其功能。 1. **ChartFactory**: 这是创建图表的主要入口点,提供了大量静态方法来创建不同类型的图表,如`createPieChart()`, `createBarChart()` 和 `...
WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到...因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图...
JFreeChart是完全基于Java语言的开源项目,因此可以使用在Java开发环境中,包括Java应用程序,或者是Java Web应用都没有任何问题。结合iText项目,可将生成的统计图表输出到PDF文件中;结合最新的POI项目,也可以将...
通过深入研究“jfreechart-1.0.19-demo.src”源码,开发者不仅可以掌握JFreeChart的基本用法,还能了解到图表库的内部工作机制,这对于开发复杂的图表应用或进行二次开发具有极大的价值。同时,学习源码中的设计模式...
jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13 jfreechart-1.0.13
在 JFreeChart 的1.0.13 版本中,其提供的 `jfreechart-1.0.13-demo.src` 压缩包包含了完整的源代码,这对于学习和理解 JFreeChart 的工作原理以及定制图表功能具有极大的价值。 首先,我们要了解 JFreeChart 的...