Clojure-JVM上的函数式编程语言(15) 桌面应用 作者: R. Mark Volkmann

原帖地址:http://java.ociweb.com/mark/clojure/article.html#DesktopApps

作者:R. Mark Volkmann  

译者:RoySong

 

桌面应用

    Clojure可以被用来构建基于Swing的图形桌面应用,下面是一个简单的例子,允许用户输入名字,点击"Greet"

按钮,然后就会出现一个欢迎对话框。注意如何采用proxy宏从指定的java类(在这个例子中是JFrame)或者任意数目

的接口(在这个例子中仅有ActionListener )来实现一个java对象:

(ns com.ociweb.swing
  (:import
    (java.awt BorderLayout)
    (java.awt.event ActionListener)
    (javax.swing JButton JFrame JLabel JOptionPane JPanel JTextField)))

(defn message
  "gets the message to display based on the current text in text-field"
  [text-field]
  (str "Hello, " (.getText text-field) "!"))

; Set the initial text in name-field to "World"
; and its visible width to 10.
(let [name-field (JTextField. "World" 10)
      greet-button (JButton. "Greet")
      panel (JPanel.)
      frame (proxy [JFrame ActionListener]
        [] ; superclass constructor arguments
        (actionPerformed [e] ; nil below is the parent component
          (JOptionPane/showMessageDialog nil (message name-field))))]
  (doto panel
    (.add (JLabel. "Name:"))
    (.add name-field))
  (doto frame
    (.add panel BorderLayout/CENTER)
    (.add greet-button BorderLayout/SOUTH)
    (.pack)
    (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
    (.setVisible true))
  ; Register frame to listen for greet-button presses.
  (.addActionListener greet-button frame))
 

Clojure-JVM上的函数式编程语言(15) 桌面应用 作者: R. Mark VolkmannClojure-JVM上的函数式编程语言(15) 桌面应用 作者: R. Mark Volkmann

你可能感兴趣的:(java,jvm,clojure,lisp)