JGantt is the Swing component for the gantt chart painting and editing. It is a powerful component, but focused on easy-to-use programming, despite its complexity . You can see it has the "standard gantt chart" look. But almost all you see can be customized and your chart can look quite differently.
Advantages:
- Reasonable architecture and design – you can use or customize this component very easy
- You can use any domain object to display it in gantt component – it must implement just one interface
- Support for data binding and internationalization (localization)
- The chart is painted by layers – each layer paints only things it is programmed for. You can easily create your own layer and include it to the chart to modify its look
- Demo application with source codes included in JGantt distribution
- Free evaluation version (no registration required)
- No additional fees when you distribute it to your customers
- Free update to new versions without any fee
JGantt features:
- Standard view – Standard chart appearance and behavior customizable settings. There are a treetable and a chart component side by side. The treetable on the left hand side, and the chart component on the right. Exactly as you know it from other gantt components. But you can modify their appearance as you need.
- Advanced treetable – The treetable has a few very interesting features: It is derived from eu.beesoft.gaia.swing.JTreeTable, so it has the features of JTable and JTree – it is easy to use it, if you are familiar with Swing programming. JTreeTable can paint "zebra" background and also show / hide columns on user selection (right click on treetable header displays popup menu with column names to hide / show). There is also built-in support for the context popup menu and double click processing.
- Data binding – Model for JGantt is oriented on the easy programming and usage. One of its features is automated data binding. You can set a name of the property of your domain object you want to display in some column and JGantt displays it without any more programming. And the same it does with setting user-changed visual data to domain object.
- Lazy loading – If your application works with a large dataset, it is suitable to load to the memory just the visible part of the data. JGantt treetable listens to treeexpand event and if node is expanded for the first time, it invokes method explore() on GanttModel. This is the place you can load data for node’s user object and build subnodes. Do you know any more simple solution?
- Layers – Gantt chart is painted in some layers. You can choose which layers you want install into gantt chart, and also you can hide / show layers at runtime. Each layer has specific purpose and paints only the gadgets it is programmed for. You can develop new layers or customize the existing. This is the way you can customize the whole chart, change the shape of timeline objects or dependency lines or add an absolutelly new functionality. In each layer you can solve also a mouse service, there is a built-in support.
- Relationships – Timeline objects (tasks) can have relationship with each other. You can define constraints on such relationship (for example: this task can start after that task is finished). In the JGantt you need implement one interface on the domain objects level. And you can subclass layer for dependencies painting to get your own visualization of dependencies, if the delivered is not suitable for you.
- Actions – JGantt comes with predefined set of actions. There are actions for zoom-in and zoom-out, creating, deleting and moving nodes (and their user-objects) in the tree hierarchy, and also actions for undo and redo operations. And also abstract superclasses for the smart building another actions.
- Localization – JGantt uses data from resource bundle for treetable column names and action properties. There is a built-in mechanism to do it without any programming. If your application contains more resource bundles for more languages, you can build a multi-lingual gantt chart in a very simple way. JGantt listens to the language changes at runtime and repaints itself if gets an event.