Things have changed a bit. Jacek Furmankiewicz brought to my attention that Project SceneGraph is licensed under GPLv2 (no classpath extension) which means both jsilhouette-scene and jsilhouette-jfx must use the same licensing scheme. But jsilhouette-geom does not, in fact it has been re-licensed to ASL 2.0, this means that starting with the next release commercial use of jsilhouette-geom is no longer a problem. The commercial usefulness of the remaining modules lies in Sun's will to re-license Project SceneGraph to GPLv2 with classpath extension.
Some other updates
- Donut shape has been added to all modules. Donuts may be circular or polygonal.
- Default values have been added to some attributes in the jfx module, alleviating the pain of setting each attribute.
- Groovy demo (GraphicsBuilder based) available!

Nice Nimbus look &feel, you may be thinking that this is the new version of the jfx demo, but it is not! this is the Groovy version (ShapesDemoGroovy.groovy)

geom | scene | jfx | groovy | |
---|---|---|---|---|
LoC | 369 | 505 | 619 | 369 |
Tokens | 1486 | 1855 | 2644 | 2194 |
Source file size (bytes) | 16412 | 21000 | 20626 | 15311 |
Compiled code size (bytes) | 104K | 60K | 76K | 92K |
The Groovy version beats the JavaFx Script version in almost all categories (the source file is even shorter than the Java2D version) but these numbers do not reflect how small the code can be in each version. For example I discovered that the jfx version has some commas (,) between attribute declaration (which bump the char and file size), I was surprisewd to find out JavaFx Script was happy with them as not even a slight warning is given by the compiler, nice!; the Groovy version harnesses the power of native syntax for Lists and Maps to reduce variable declaration; defaults values are not really used that much in all versions.
I also mentioned previously that making the second and third demo was quicker once the first one was done, in this case it was no different. The jfx version was copied almost verbatim, added some Groovy sugar here and there (even had to add a MetaClass hack due to how SwingBuilder handles look&feel in the 1.5.6 version (the new one is slicker

Where each
draw*
function is of the formHere I'd like to take the opportunity to mention that the function signature must have
Void
as its return type otherwise a compilation error will be thrown. If the return type is not specified then it will be the same type of the last evaluated expression, in this case Node[]
, SwingButton expects its action
function to return Void
. I'm sure a tool (like NetBeans' jfx plugin) would have drawn a red underline/popped an error/whatever under the offending code before attempting a full compile on the code by myself, but I went with the "manual" way: Vim + command line compiler, so there, had to be more careful 
Here is the Groovy version
Where
shapes
is a Map initialized likeThe Groovy version requires some 'plumbing'
- Fix
SwingBuilder.lookAndFeel
to accept a List of L&F identifiers (available in Groovy 1.6.x). - Set the preferred L&F.
- Tell the frame where it should be located by default (locationRelativeTo: null)
Yup, hypothetical is more like it (my code that is, still have to learn more about JavaFx Script) but you get the idea. Back to jSilhouette, I'd like to have proper javadocs/javafxdocs in place before releasing the next version, so it will take a couple of days more.
Feedback is always appreciated.