Note that current development is on the develop branch, not master
There's now a [Google Group] (https://groups.google.com/group/seesaw-clj) for discussion and questions.
[Here's a brief tutorial] (https://gist.github.com/1441520) that covers some Seesaw basics. It assumes no knowledge of Swing or Java.
See [the Seesaw Wiki] (https://github.com/daveray/seesaw/wiki) and [the Seesaw API Docs] (http://daveray.github.com/seesaw/) for more detailed docs. Note that the docs in the code (use the doc
function!) are always the most up-to-date and trustworthy.
t
Seesaw is a library/DSL for constructing user interfaces in Clojure. It happens to be built on Swing, but please don't hold that against it. It's an experiment to see what I can do to make user interface development funner in Clojure. It's kinda inspired by Shoes, Stuart Sierra's Swing posts, etc. clojure.contrib.swing-utils is useful, but minimal and still means a lot of "Java-in-Clojure" coding.
Seesaw is compatible with both Clojure 1.2 and 1.3.
- Construct widgets with simple functions, e.g.
(listbox :model (range 100))
- Support for all of Swing's built-in widgets as well as SwingX.
- Support for all of Swing's layout managers as well as MigLayout, and JGoodies Forms
- Convenient shortcuts for most properties. For example,
:background :blue
or:background "#00f"
, or:size [640 :by 480]
. - CSS-style selectors with same syntax as Enlive.
- Unified, extensible event API
- Unified, extensible selection API
- Widget binding, i.e. map changes from one widget into one or more others in a more functional style. Also integrates with Clojure's reference types.
- Graphics
- i18n
- An extensive test suite
There are numerous Seesaw examples in test/seesaw/test/examples.
Here's how you use Seesaw with [Leiningen] (https://github.com/technomancy/leiningen)
Install lein
as described and then:
$ lein new hello-seesaw
$ cd hello-seesaw
Add Seesaw to project.clj
(defproject hello-seesaw "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.3.0"]
[seesaw "x.y.z"]])
Replace the Seesaw version with whatever the latest version tag is. See below!
Now edit the generated src/hello_seesaw/core.clj
file:
(ns hello-seesaw.core
(:use seesaw.core))
(defn -main [& args]
(invoke-later
(-> (frame :title "Hello",
:content "Hello, Seesaw",
:on-close :exit)
pack!
show!)))
Now run it:
$ lein run -m hello-seesaw.core
NOTE: Here's how you can run against the bleeding edge of Seesaw:
- Clone Seesaw from github. Fork if you like. Switch to the "develop" branch.
- In your Seesaw checkout, run
lein install
to build it - In your project's
project.clj
file, change the Seesaw version toX.Y.Z-SNAPSHOT
to match whatever's in Seesaw'sproject.clj
. - Run
lein deps
- Move along
- Meikel Brandmeyer (kotarak)
- David Brunell (Quantalume)
- Stuart Campbell (harto)
- Michael Frericks
- Jonathan Fischer Friberg (odyssomay)
- Anthony Grimes (Raynes)
- Thomas Karolski (MHOOO)
- Chun-wei Kuo (Domon)
- Vladimir Matveev (dpx-infinity)
- Jeff Rose (rosejn)
Copyright (C) 2011 Dave Ray
Distributed under the Eclipse Public License, the same as Clojure.