<p>What is the best way to do GUIs in <a href="http://en.wikipedia.org/wiki/Clojure" rel="noreferrer">Clojure</a>?</p>

<p>Is there an example of some functional <a href="http://en.wikipedia.org/wiki/Swing_%28Java%29" rel="noreferrer">Swing</a> or <a href="http://en.wikipedia.org/wiki/Standard_Widget_Toolkit" rel="noreferrer">SWT</a> wrapper?
Or some integration with <a href="http://en.wikipedia.org/wiki/JavaFX" rel="noreferrer">JavaFX</a> declarative GUI description which could be easily wrapped to <a href="http://en.wikipedia.org/wiki/S-expression" rel="noreferrer">s-expressions</a> using some macrology?</p>

<p>Any tutorials?</p>

From this
page
:
```
```
(import '(javax.swing JFrame JButton JOptionPane)) ;'
(import '(java.awt.event ActionListener))          ;'

(let [frame (JFrame. "Hello Swing")
     button (JButton. "Click Me")]
 (.addActionListener button
   (proxy [ActionListener] []
     (actionPerformed [evt]
       (JOptionPane/showMessageDialog  nil,
          (str "<html>Hello from <b>Clojure</b>. Button "
               (.getActionCommand evt) " clicked.")))))

 (.. frame getContentPane (add button))

 (doto frame
   (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
   .pack
   (.setVisible true)))

print("code sample");
```
```
And, of course, it would be worth looking at the
interoperability
section of clojure's website.