As usual, all the following information is also available on the project page at
http://www.sourceforge.net/projects/jopenchart. There you will always
find the latest releases, you can browse feature requests, bug lists etc. You find the most important links
to the project stats on the right side of this page.
How to contribute
There are many ways to offer help. This doesn't only include coding but also testing the code, making suggestions,
writing documentation etc. The best thing to do first is to read the Developer Guide, which is
still quite short. You will get a first impression how the library is designed and you will also find remarks on the
employed coding and documentation styles. If you take a close look at the library source you will easily find the parts
depicted in the Developer Guide and you can start coding. If you need a certain feature
you could file a Feature Request
but you can also drop a mail to the developer mailinglist at
firstname.lastname@example.org and you will
definitely be guided to get what you want. Don't forget to
join the list, too.
There are not enough contributors without me, Sebastian, to fulfill all
feature requests. Additionally, we might have our own idea about how the library should develop. If you finished
your work just submit a patch
with a thorough documentation what it does.
This makes it a lot easier for us to include your changes in the CVS release.
To ease the hard path to become a JOpenChart contributor I prepared a
Developer Guide which documents the
JOpenChart library from a top-level perspective. It documents the preferred coding styles for any contributions
and it also depicts some of the algorithms I used in the code. The TeX source for the guide is available through CVS together
with a binary version of the PDF file. If you have any comments, suggestions for additions or whatever send a message
to the developer mailinglist at
join that list.
Sourceforge provides an excellent CVS-Howto that gets you up and running with CVS and SSH on sourceforge. Anonymous
CVS access is possible using
as your CVSROOT. The correct modulename is
jopenchart. If you want to check out the version without
need for the JDK 1.4, checkout the module as written above. Afterwards perform a CVS update on the files
src/build.xml. Update them with the versions
For help on getting you up and running with CVS and SSH on sourceforge, check out the sourceforge
documentation. If you need a nice graphical CVS client,
go to www.cvsgui.org (for any OS) or to
www.tortoisecvs.org if your a Windows user.
If you like to browse the CVS repository using your favourite browser, you can do so using the
The following items are on the top of my priority list. If one or more of them specifically interest you,
and you would like to do the work, drop me a mail and offer your help.
- Move the ChartDataModelConstraints creation to the AbstractChartDataModel class, because it is
essentially the same for all DataModel classes.
- Create the ChartDataModelConstraints class as an inner class and not an anonymous one. It could be
overwritten then. Apply modified Singleton pattern to avoid the creation of new objects, instead there should be one
per DataModel instance, but not exactly one at all.
- done through setManualScale() now
Implement setZeroBased(true / false) in DataModel. The value scale is automatically extended to a minimum or
maximum value of 0. In the ChartDataModelConstraints the following should be implemented:
if( isZeroBased() && (ymin > 0 || ymax < 0) )
ymin = 0; ( ymax = 0 respectively )
Implement setManualScale(true / false) in ChartDataModel to manually set the max and min values. This implies
isManualScale > isAutoScale (isZeroBased) > default (ZeroBased)
for the different methods of constraint computation, ie isManualScale overrides isAutoScale etc, but the last two
methods could be additionally zero based. Only numerical ChartDataModels can use manual x-axis scaling.
ChartDataModelConstraints could be overridden to achieve this.
- done through setManualScale and automatic clipping in AbstractChartRenderer now
b) setManualExtension for numerical ChartDataModels, ie manual scales can fade out data values. The simpler
case would limit manual scales to include the data value bounds in any case. This new behaviour could be used
to implement zooming. Might require a ChartDataLayoutChangedEvent class and maybe the methods getValueAt and
getColumnValueAt should implement bound checking and return NaN or null if out of bounds.
- In this case, CoordSystem should become ChartDataLayoutListener to automatically relayout if things like
the constraints or CoordSystem parameters change.
- Implement second y-axis. Several things should be taken into account:
- min, max calculation is identical to the first y-axis,
- right bounds of CoordSystem should be adapted,
- should always be zero-based, always without y-axis arrows,
- min, max value should be scaled to align on zero-coordinate,
- the axis should be rendered lefthand or righthand depending on first y-axis.
- Change paintArrows in CoordSystem to setPaintArrows(NO_ARROWS (0x0) | X_ARROW (0x1) | Y_ARROW (0x2) | XY_ARROWS (0x3)).
- Paint x-axis labels as values between 0 and 9.9 and exclude the maximum power of ten, write it below the axis unit
as a scaling factor. This should be optional but would be very handy, because the labels cannot overlap anymore.
- Implement Symbol Interface and implementations (square, circle, diamond, triangle etc)
for use in the PlotChartRenderer. Symbol should contain render method
to render themselves. RowColorModel maps datasets to Symbols and colors. Symbols are rendered in the corresponding color.
Render method is called with coordinate parameter, which is parameter of the center point. Symbols are not chosen
randomly but in modulo fashion, ie symbol = numofdatasets modulo numofsymbols. Could Symbols be found automatically or should
they be registered by RowColorModel so that users can implement their own.