aboutsummaryrefslogtreecommitdiff
path: root/modules/miglayout/src/examples/clojure
diff options
context:
space:
mode:
authorChouser <chouser@n01se.net>2010-09-30 12:13:11 -0400
committerChouser <chouser@n01se.net>2010-09-30 14:03:55 -0400
commit2e7ef0b12838b33f12e5c13ae41d4dd34a5469e8 (patch)
tree2fabe27d86925bff45e7b708d1c62507337b4482 /modules/miglayout/src/examples/clojure
parent39c38227d21f8cb6139d68f361b516ce1f05f66e (diff)
Restore examples lost during modules split, a6a92b9b3d2bfd9a56e1e5e9cfba706d1aeeaae5
Diffstat (limited to 'modules/miglayout/src/examples/clojure')
-rw-r--r--modules/miglayout/src/examples/clojure/examples/miglayout.clj60
1 files changed, 60 insertions, 0 deletions
diff --git a/modules/miglayout/src/examples/clojure/examples/miglayout.clj b/modules/miglayout/src/examples/clojure/examples/miglayout.clj
new file mode 100644
index 00000000..04c9a040
--- /dev/null
+++ b/modules/miglayout/src/examples/clojure/examples/miglayout.clj
@@ -0,0 +1,60 @@
+;; Copyright (c) Stephen C. Gilardi. All rights reserved. The use and
+;; distribution terms for this software are covered by the Eclipse Public
+;; License 1.0 (http://opensource.org/licenses/eclipse-1.0.php) which can
+;; be found in the file epl-v10.html at the root of this distribution. By
+;; using this software in any fashion, you are agreeing to be bound by the
+;; terms of this license. You must not remove this notice, or any other,
+;; from this software.
+;;
+;; clojure.contrib.miglayout.example
+;;
+;; A temperature converter using miglayout. Demonstrates accessing
+;; components by their id constraint.
+;;
+;; scgilardi (gmail)
+;; Created 31 May 2009
+
+(ns examples.miglayout
+ (:import (javax.swing JButton JFrame JLabel JPanel JTextField
+ SwingUtilities))
+ (:use (clojure.contrib
+ [miglayout :only (miglayout components)]
+ [swing-utils :only (add-key-typed-listener)])))
+
+(defn fahrenheit
+ "Converts a Celsius temperature to Fahrenheit. Input and output are
+ strings. Returns \"input?\" if the input can't be parsed as a Double."
+ [celsius]
+ (try
+ (format "%.2f" (+ 32 (* 1.8 (Double/parseDouble celsius))))
+ (catch NumberFormatException _ "input?")))
+
+(defn- handle-key
+ "Clears output on most keys, shows conversion on \"Enter\""
+ [event out]
+ (.setText out
+ (if (= (.getKeyChar event) \newline)
+ (fahrenheit (-> event .getComponent .getText))
+ "")))
+
+(defn converter-ui
+ "Lays out and shows a Temperature Converter UI"
+ []
+ (let [panel
+ (miglayout (JPanel.)
+ (JTextField. 6) {:id :input}
+ (JLabel. "\u00b0Celsius") :wrap
+ (JLabel.) {:id :output}
+ (JLabel. "\u00b0Fahrenheit"))
+ {:keys [input output]} (components panel)]
+ (add-key-typed-listener input handle-key output)
+ (doto (JFrame. "Temperature Converter")
+ (.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
+ (.add panel)
+ (.pack)
+ (.setVisible true))))
+
+(defn main
+ "Invokes converter-ui in the AWT Event thread"
+ []
+ (SwingUtilities/invokeLater converter-ui))