Hosted on the JVM

Clojure is designed to be a hosted language, sharing the JVM type system, GC, threads etc. It compiles all functions to JVM bytecode. Clojure is a great Java library consumer, offering the dot-target-member notation for calls to Java. Class names can be referenced in full, or as non-qualified names after being imported. Clojure supports the dynamic implementation of Java classes and interfaces using proxy.


Here's a small Swing app:


(import '(javax.swing JFrame JLabel JTextField JButton)
        '(java.awt.event ActionListener)
        '(java.awt GridLayout))
(defn celsius []
  (let [frame (new JFrame "Celsius Converter")
        temp-text (new JTextField)
        celsius-label (new JLabel "Celsius")
        convert-button (new JButton "Convert")
        fahrenheit-label (new JLabel "Fahrenheit")]
    (. convert-button
        (addActionListener
           (proxy [ActionListener] []
                (actionPerformed [evt]
                    (let [c (. Double (parseDouble (. temp-text (getText))))]
                      (. fahrenheit-label
                         (setText (str (+ 32 (* 1.8 c)) " Fahrenheit"))))))))
    (doto frame
               (setLayout (new GridLayout 2 2 3 3))
               (add temp-text)
               (add celsius-label)
               (add convert-button)
               (add fahrenheit-label)
               (setSize 300 80)
               (setVisible true))))
(celsius)

celsius converter
 

 

Copyright © Rich Hickey