25 lines
817 B
Clojure
25 lines
817 B
Clojure
(ns counter-window
|
|
(:import (javax.swing JFrame JLabel JButton)))
|
|
|
|
(defmacro on-action [component event & body]
|
|
`(. ~component addActionListener
|
|
(proxy [java.awt.event.ActionListener] []
|
|
(actionPerformed [~event] ~@body))))
|
|
|
|
(defn counter-app []
|
|
(let [counter (atom 0)
|
|
label (JLabel. "There have been no clicks yet")
|
|
button (doto (JButton. "Click me!")
|
|
(on-action evnt
|
|
(.setText label
|
|
(str "Counter: " (swap! counter inc)))))
|
|
panel (doto (JPanel.)
|
|
(.setOpaque true)
|
|
(.add label)
|
|
(.add button))]
|
|
(doto (JFrame. "Counter App")
|
|
(.setContentPane panel)
|
|
(.setSize 300 100)
|
|
(.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
|
|
(.setVisible true))))
|