Search code examples
javaswingxulgui-builder

UI Development with Java and XUL


I'm interested in using XUL as a standard way of defining my Java app (both Swing and web alike) UIs. To do this, I need two major components:

  • An open source GUI builder that allows me to drag n'drop UI elements, like Abeille forms or Matisse, etc., and export these UIs into a standards-compliant XUL file
  • A Java lib for reading that exported XUL file and building UI components out of it

I would have thought this would be easy to find, however there are a number of problems:

  • For one, I can't seem to find an "official" XSD Schema for XUL (even off of Mozilla's site), so it doesn't seem to be universally enforced/validated from a central schema, and as such, seems to have lots of conflicting variations across various XUL tools/products
    • Hence, gettting one tool that can export a XUL file, and a Java lib to read that XUL file without errors, seems to be difficult/impossible
  • All the XUL-based GUI builders I've found seem to be proprietary and expensive
  • The only Java libs that can read XUL files seem to be billed as "XUL toolkits" and include a web server, templating engine, etc. In other words, they are overkill for what I need, which is something that can read a XUL file and produce a container object full of UI widgets.

Anyone have any idea as to how I could marry these two ideas together and accomplish what I need? Thanks in advance!


Solution

  • I once explored that avenue with many toolkits. From my experience, it is not worth it, but why not give it another try?...

    I needed the following :

    • CSS Integration, if possible, to skin the UI
    • Scripting using Rhino and/or other JVM scripting languages
    • XML markup support and basic Swing integration (Not really important)

    I ended up customizing an existing library. I can't recall the exact name, but I think it was a fork of swingml to support inline scripting better. I improved the Rhino support and also hooked some Jython integration.

    There were many other options, but nothing that was really astonishing.

    I also tried to use Apache Commons Jelly (main library behind early Apache Maven versions). Commons Jelly has/had a Jelly Swing module.

    At the end, I realized that it wasn't both convenient and time saving, in addition to overhead (Java reflection and dynamic method dispatching, proxies and interaction with JVM scripting languages -> scoping among other things, etc.).