原帖地址: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))