Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/daveray/seesaw
Seesaw turns the Horror of Swing into a friendly, well-documented, Clojure library
https://github.com/daveray/seesaw
Last synced: 3 months ago
JSON representation
Seesaw turns the Horror of Swing into a friendly, well-documented, Clojure library
- Host: GitHub
- URL: https://github.com/daveray/seesaw
- Owner: clj-commons
- Created: 2011-03-21T02:44:09.000Z (over 13 years ago)
- Default Branch: master
- Last Pushed: 2023-07-28T19:55:45.000Z (over 1 year ago)
- Last Synced: 2024-05-23T00:09:37.582Z (5 months ago)
- Language: Clojure
- Homepage: https://groups.google.com/group/seesaw-clj
- Size: 2.26 MB
- Stars: 1,449
- Watchers: 55
- Forks: 149
- Open Issues: 71
-
Metadata Files:
- Readme: README.md
- Codeowners: .github/CODEOWNERS
Awesome Lists containing this project
- awesome-clojure - seesaw
README
[![Build Status](https://secure.travis-ci.org/clj-commons/seesaw.png?branch=master)](http://travis-ci.org/clj-commons/seesaw)
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.
[Here's the slides](http://darevay.com/talks/clojurewest2012/) from a Clojure/West 2012 talk on the Seesaw. Best viewed in Chrome or Safari.
# Seesaw: Clojure + UI
_*See [the Seesaw Wiki](https://github.com/clj-commons/seesaw/wiki) and [the Seesaw API Docs](https://clj-commons.org/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.*_
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.
## Features
Seesaw is compatible with Clojure 1.4, but will probably work fine with 1.3 and 1.5. Maybe even 1.2.
* Swing knowledge is *not required* for many apps!
* [Construct widgets](https://github.com/clj-commons/seesaw/wiki/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](https://github.com/clj-commons/seesaw/wiki/Selectors) with same syntax as [Enlive](https://github.com/cgrand/enlive).
* Unified, extensible [event API](https://github.com/clj-commons/seesaw/wiki/Handling-events)
* Unified, extensible [selection API](https://github.com/clj-commons/seesaw/wiki/Handling-selection)
* [Widget binding](http://blog.darevay.com/2011/07/seesaw-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](https://github.com/clj-commons/seesaw/wiki/Graphics)
* [i18n](https://github.com/clj-commons/seesaw/wiki/Resource-bundles-and-i18n)
* An extensive [test suite](https://github.com/clj-commons/seesaw/tree/master/test/seesaw/test)_There are numerous Seesaw examples in [test/seesaw/test/examples](https://github.com/clj-commons/seesaw/tree/master/test/seesaw/test/examples)._
## TL;DR
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-seesawAdd Seesaw to `project.clj`
```clojure
(defproject hello-seesaw "1.0.0-SNAPSHOT"
:description "FIXME: write"
:dependencies [[org.clojure/clojure "1.4.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:
```clojure
(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. *Note that Seesaw uses Leiningen 2 as of 3 NOV 2012!*
* In your project's `project.clj` file, change the Seesaw version to `X.Y.Z-SNAPSHOT` to match whatever's in Seesaw's `project.clj`.
* Run `lein deps` ... actually you can just start coding. `lein deps` is almost never necessary.
* Move along## Contributors
* 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)
* Simon Lundmark (simlun)
* Jake McCrary (jakemcc)## License
Copyright (C) 2012 Dave Ray
Distributed under the Eclipse Public License, the same as Clojure.