Вы также можете рассмотреть Качели , которые требуют встраивания Clojure .
Ваш код GUI будет выглядеть примерно так:
(defn -main [& args]
(invoke-later
(-> (frame :title "Hello",
:content "Hi there",
:on-close :exit)
pack!
show!)))
Где «Привет!» Автоматически «конвертируется» в JLabel, но вместо этого вы можете поместить любой компонент Swing для :content
.
Это более сложный пример из моего seesaw-buttons
примера проекта:
(ns seesaw-buttons.core
(:use seesaw.core))
(defn -main [& args]
(invoke-later
(let [open-action (action
:handler (fn [e] (alert "I should open a new something."))
:name "Open ..."
:key "menu O"
:tip "Open a new something something.")
exit-action (action
:handler (fn [e] (.dispose (to-frame e)))
:name "Exit"
:tip "Close this window")]
(-> (frame :title "Hello",
:content (border-panel
:north (toolbar :items [open-action exit-action])
:center "More content here..."),
:on-close :exit)
pack!
show!))))
Преимуществом Seesaw и Clojure является исключение большого количества стандартного кода, а Seesaw добавил некоторые функциональные возможности и соглашения, ускоряющие разработку.