I wonder if there are any suggestions for declarative GUI programming in Java. (I abhor visual-based GUI creator/editor software, but am getting a little tired of manually instantiating JPanels and Boxes and JLabels and JLists etc.)
That's my overall question, but I have two specific questions for approaches I'm thinking of taking:
JavaFX: is there an example somewhere of a realistic GUI display (e.g. not circles and rectangles, but listboxes and buttons and labels and the like) in JavaFX, which can interface with a Java sourcefile that accesses and updates various elements?
Plain Old Swing with something to parse XUL-ish XML: has anyone invented a declarative syntax (like XUL) for XML for use with Java Swing? I suppose it wouldn't be hard to do, to create some code based on STaX which reads an XML file, instantiates a hierarchy of Swing elements, and makes the hierarchy accessible through some kind of object model. But I'd rather use something that's well-known and documented and tested than to try to invent such a thing myself.
JGoodies Forms -- not exactly declarative, but kinda close & I've had good luck with JGoodies Binding. But their syntax for Form Layout seems kinda cryptic.
edit: lots of great answers here! (& I added #3 above) I'd be especially grateful for hearing any experiences any of you have had with using one of these frameworks for real-world applications.
p.s. I did try a few google searches ("java gui declarative"), just didn't quite know what to look for.
Even Java, while it is self-contained, does not currently provide great GUI designer capabilities.
In Java applications, the components that comprise a GUI (Graphical User Interface) are stored in containers called forms. The Java language provides a set of user interface components from which GUI forms can be built.
You might have a look at javabuilders; it uses YAML to build Swing UIs.
A simple example from the manual [PDF]:
JFrame: name: myFrame title: My Frame content: - JLabel: name: myLabel2 text: My First Label - JLabel: name: myLabel2 text: My Second Label
Alternatively:
JFrame: name: myFrame title: My Frame content: - JLabel: {name: myLabel2, text: My First Label} - JLabel: {name: myLabel2, text: My Second Label}
Or even:
JFrame(name=myFrame,title=My Frame): - JLabel(name=myLabel2, text=My First Label) - JLabel(name=myLabel2, text=My Second Label)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With