A few years ago back in 2006 I created a Swing component called ‚Equation Builder‘. It builds equations in the natural visual style that you get when writing on paper.
You can build some pretty cool looking equations like this :
Elements can be dragged and dropped onto empty nodes in the canvas in the middle.
When you first open up the application it looks like this :
A node represented by the gray circle is displayed in the middle. You can drag node operators (displayed in the table on the right), or inputs (table on the bottom) onto this node. You can also replace it with a constant or drag other calculations onto this node (second tab on the bottom).
Let’s drag an addition operator onto the root node :
Because an addition operator is binary, the single empty node gets replaced with two empty nodes.
We can replace one these empty nodes with another operator, division, which is also a binary operator however visually it is up-down rather than left-right :
You get the picture..! Just keep adding operators and the thing expands and expands.
A node can also be replaced with an input (aka variable) defined in the table. Or a node can also be replaced with a constant (aka a number). You just have to click on the empty node and a textfield appears. You can then add any kind of number to the equation.
There is even an implementation of the sum operator (Sigma). Here is an arbitrary example:
I also have a power operator implemented :
Hmm… it needs a bit more work, but still it looks OK. (I have no idea what those gray squares are L )
I think technically this program is pretty interesting.
What is most interesting to me is that the whole equation is rendered using GridBagLayout, which shows how powerful GridBagLayout can be. Everytime you replace an empty node, you are removing the empty node object, keeping the grid bag constraints, and with these grid bag constraints, adding a new object in ist place.
There is a type of Model-View relationship in the elements. There are the visual object, all extending from Node.java, and there is a model hierarchy which shadows this visual model. Elements in this hierarchy all extends from CalculationObject.
I think ist kind of redundant having these two hierarchy models. I’m not sure what I was thinking those years ago.
Anyway this project needs a lot of love. So if you want to contribute on Github go for it! If you feel like you could use this component please let me know. I would be really interested to know how someone would use this component.
The project can be downloaded here :