cbrownmacquarietelecom.co Posted February 23, 2016 Share Posted February 23, 2016 Hi,I'm trying to create a chart similar to the following: http://wwwisis2.isis.rl.ac.uk/DataAnalysis/jpowder/Images/XYZDataSet.png. The chart in question uses an XYZDataset, however the Jasper Reports API only refers to the Bubble chart. There is no mention of XYBlock or XYShape charts.To date I have used chart customisers to tweak charts where required but I'm wondering if I need to use a different approach in this instance. I've attempted to create a cusomiser for a bubble chart but need to work out how to override the default rendering of bubbles. I'm not sure if this is best use of my time.I have been reading documentation on rendering images using third party APIs and it looks like I should be able to create a chart of my choice using a scriptlet. Is a valid approach?Cheers Link to comment Share on other sites More sharing options...
cbrownmacquarietelecom.co Posted March 2, 2016 Author Share Posted March 2, 2016 The answer to my question is create a report (that uses an image element) with an appropriate scriptlet class. Create a variable with class attribute set to net.sf.jasperreports.engine.JRRenderable.I used the afterReportInit() method where I set the variable using JCommonDrawableRenderer().The chart uses a DateAxis that ranges between the first and last days of a month. I've tested the chart building code in a separate Java program and used the code in the scriptlet. The following statement "xAxis.setRange(end.getTime(), start.getTime());" works in my Java code but fails in the scriptlet with "net.sf.jasperreports.engine.JRException: java.lang.IllegalArgumentException: Requires 'lower' < 'upper'.". The relevant scriptlet code is as follows: public void afterReportInit() throws JRScriptletException { int year = 2016; int month = 1; int day = 1; Calendar[] dates = dateRange(year, month, day); Calendar start = dates[0]; Calendar end = dates[1]; XYZDataset dataset = createDataset(start, end); DateAxis xAxis = new DateAxis(); xAxis.setRange(start.getTime(), end.getTime()); xAxis.setLowerMargin(0.0); NumberAxis yAxis = new NumberAxis(); yAxis.setUpperMargin(0.0); yAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); XYBlockRenderer renderer = new XYBlockRenderer(); renderer.setBlockWidth(1000.0 * 60.0 * 60.0 * 24.0); renderer.setBlockHeight(0.5f); renderer.setBlockWidth(0.1f); XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer); plot.setBackgroundPaint(Color.lightGray); plot.setRangeGridlinePaint(Color.white); plot.setAxisOffset(new RectangleInsets(5, 5, 5, 5)); JFreeChart chart = new JFreeChart(null, plot); chart.removeLegend(); chart.setBackgroundPaint(Color.white); ChartUtilities.applyCurrentTheme(chart); this.setVariableValue("Chart", new JCommonDrawableRenderer(chart)); } private static Calendar[] dateRange(int year, int month, int day) { Calendar start = new GregorianCalendar(year, month, day); start.set(Calendar.DAY_OF_MONTH, 1); start.set(Calendar.HOUR_OF_DAY, 0); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); start.set(Calendar.MILLISECOND, 0); int numberOfDays = start.getActualMaximum(Calendar.DAY_OF_MONTH); Calendar end = (Calendar) start.clone(); end.set(Calendar.DAY_OF_MONTH, numberOfDays); end.set(Calendar.HOUR_OF_DAY, 23); end.set(Calendar.MINUTE, 59); end.set(Calendar.SECOND, 59); end.set(Calendar.MILLISECOND, 999); return new Calendar[] { start, end }; }[/code]What possible reason could there be for this inconsistency?On a different note, my scriplet are not picked up when I re-preview in Jasper Studio unless I restart the IDE which now entails having to exit. Can anyone tell me what happened to the restart menu option? I am running 6.2.0.final under Ubuntu 14.04. Link to comment Share on other sites More sharing options...
cbrownmacquarietelecom.co Posted March 2, 2016 Author Share Posted March 2, 2016 Problem solved! The method createDataset() was modifying the Calendar objects. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now