-- Leo's gemini proxy

-- Connecting to spikydinosaur.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

UI programming in Clojure


One of my recent mini projects at work was to build an application that parsed a bunch of files let you dig around and interact with the results.


It's actually split into two projects (it could be one, I guess); a frontend written with ClojureScript using reagent to provide the UI and a backend in Clojure that provides a REST interface to all of the processing of the files.


While this works OK, I also need to be able to give it to other people (customers) to run themselves and this two-part approach is just too awkward. Really what i really want is a single self-contained executable jar and no unnecessary webservers in the middle of it.


The options are pretty sparse:


- Dive straight into Swing

- Use the Seesaw wrapper for Swing

- Use a JavaFX wrapper


I've done the Swing thing before many years ago, I don't really want to go there again. Seesaw seems well-regarded but no significant updates for 9 years put me off. It's not always a bad thing, it could be the sign of a mature library but ...


Historically I've always avoided JavaFX. Many years ago I worked at the same company (different office / country) as its creator, Chris Oliver when it was still called F3. I would write Swing back then, I don't remember JavaFX (or F3) being mature enough. While I don't actually do much UI work I've been aware that it has been part of Java for a long time, and it can do an awful lot more than I know about.


It seems there are a handful of Clojure wrappers for it these days; cljfx seems reasonable and actively maintained.


Within a short time I've bootstrapped myself enough to build a skeleton UI thanks to a mixture of reading blogs and looking through the examples provided by cljfx. So far so good. If I find myself doing a bit more of this I might have to invest in a good JavaFX textbook to get a better understanding of what it's about.

-- Response ended

-- Page fetched on Fri May 10 14:06:12 2024