blob: 8c3f8c44ff9238ffa2ea55f1431f0d7cedbc492a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
;; 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
;;
;; Temperature converter using miglayout. Demonstrates accessing components
;; by their id constraint.
;;
;; scgilardi (gmail)
;; Created 31 May 2009
(ns clojure.contrib.miglayout.example
(:import (javax.swing JButton JFrame JLabel JPanel JTextField)
(java.awt.event ActionListener))
(:use (clojure.contrib
[miglayout :only (miglayout components)]
[swing-utils :only (add-action-listener)])))
(defn fahrenheit
"Converts a string containing a Celsius temperature to a string
containing a Fahrenheit temperature. Returns \"input?\" if the
input can't be read"
[c-str]
(try
(format "%.2f \u00b0Fahrenheit"
(+ 32 (* 1.8 (Double/parseDouble c-str))))
(catch NumberFormatException _
"input?")))
(defn main
"Creates a converter UI"
[]
(let [panel
(miglayout
(JPanel.)
(JTextField.) {:id :input :width 120}
(JLabel. "\u00b0Celsius") :wrap
(JButton. "Convert") {:id :convert}
(JLabel. "\u00b0Fahrenheit") {:id :output :width 120})
{:keys [convert input output]} (components panel)]
(add-action-listener convert
(fn [evt in out] (.setText out (fahrenheit (.getText in))))
input output)
(doto (JFrame. "Temperature Converter")
(.add panel)
(.pack)
(.setVisible true))))
|