nansen
nansen

Reputation: 2962

Should I use Java for a custom Swing component designed for a clojure app?

I want a simple timeline component (like in video editing software) for a clojure/seesaw app and I am wondering if it is a good approach to implement this directly with clojure and seesaw or if I should write it in java and make my clojure wrapper around it.

Or more generally: is a functional programming language optimal for writing UI widgets? I cannot imagine doing that without a lot of state involved. And wasn't OO invented for UI-development in the first place?

Upvotes: 5

Views: 378

Answers (3)

mikera
mikera

Reputation: 106351

All else being equal (i.e. assuming you know both Clojure and Java), I would probably write this as a custom Swing component in Java.

Reasons:

  • Swing is fundamentally a Java-based OOP framework and is a better fit with Java in terms of paradigm
  • Mutable state is easier in Java than in Clojure
  • If you write it in Java, you can use it elsewhere more easily (e.g. as a library from other Java code)
  • It's easy to wrap a Swing component in Clojure after you have created it

Of course, for the application logic itself I would certainly prefer Clojure.

Upvotes: 2

Dave Ray
Dave Ray

Reputation: 40005

You could go either way. On Overtone, we've built a number of custom graphical components directly in Clojure with Seesaw. Many times, an atom and (seesaw.core/canvas) is sufficient for this kind of thing.

Depending on how fancy you're going to get, one reason to do it in Clojure is you can extend Seesaw's protocols (selection, binding, etc) to the new widget so it works seamlessly with Seesaw. Another consideration is whether your widget needs to make use of Clojure data from other parts of the app. This will be much cleaner from Clojure than Java.

That said, if you're comfortable in Swing/Java, you can do it there and Seesaw will be perfectly happy to work with a custom widget built in Java. Good luck!

Upvotes: 4

Ankur
Ankur

Reputation: 33637

FP is good for doing UI programming but for that the underlying UI framework should also be based on FP concepts like FRP etc. In your case the underlying UI framework (Swing) is OO based and hence it would be more easy to implement it in Java but you can still do it in seesaw.

Upvotes: 2

Related Questions