Hi,

I'm one of those bearded (Lin)Unixians person who love the black screen. 
I'm closer to back-office than front-office (it's may be my (too) pragmatic 
mind). 
But sometimes, for some programs, a GUI is a good thing for users. In 
particular when the sofware is not for barbed person :)
First, I want to give details about my GUI development experience. For some 
years now, I developed GUI with Cocoa (OS X, before IPhone and iOS out). 
Recently, I did some development in HTML5/CSS/JS (and I hope, in the 
future, I'll learn ClojureScript).

Back to now, I'd like to make a GUI for a Clojure program and being in the 
JVM world, I thought I would try a new framework: JavaFX2. Below, I give my 
feeling and anyone can write remarks about it.

We are living in the 2010's years and with JavaFX we find another framework 
whose the conception is inheritance spirit. The first thing you do, is a 
subclass of Application. Well, what do you do with delegation? Composition? 
I had a lot of pleasure with Cocoa because there was no (almost) 
inheritance. All your work was done by delegation. I found that more 
elegant and cleaner. As far as I like no more the Apple's philosophy (but 
it's another discussion), for this point I found that the Cocoa's 
architecture was well-thought. And I find that the Clojure code is damaged 
by the JavaFX inheritance. You must write  :gen-class extends to just 
display a window. And when I read documentation about bindings, I thought 
it was complicated to make a simple thing (look at watch in clojure). OK, 
the JavaFX bindings work but I feel writing code for writing code.

My second bad point for JavaFX, it's about the interactive development. I 
love languages like Groovy and Clojure because you can test the code in a 
console (GroovyConsole or REPL). Can we do that with JavaFX? My main 
problem is the following: for launching of your JavaFX application, you 
have to call the start method in your main. It blocks the current thread 
and the REPL waits for closing the window. While with Swing, you can create 
components on-the-fly (no start method to display your main frame) in the 
REPL. The "thing" lives and changes under your eyes. It's magic.

Did I miss something ? Did I have a bad feeling too soon because the code's 
weight and difficulties? When I read code like callback<TableColumn<Person, 
String>,XXX<YYYY>>, sorry but I'm discouraged. Some people laugh at Clojure 
because of its parentheses. But in this case, we can talk about Java and 
its arrows.

Finally, I think I'll turn to Swing. OK  it's less pretty and hype than 
JavaFX but the fact I can play with Swing inside REPL is fun. And 
seriously, why JavaFX's developers made something so unpleasant (I think 
again this inheritance point as soon as you want to launch a simple frame).

If some people work with JavaFX and think it's great, I'm ready to read 
your posts. Even if I'm a bearded person, I'm ready to reassess. Perhaps, I 
missed something.

Chris

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to