简单的clojure java互操作(swing)程序可以';我不太明白

简单的clojure java互操作(swing)程序可以';我不太明白,java,swing,clojure,Java,Swing,Clojure,我很快就能让下面的程序开始工作了。我用的是LightTable。我在最后包含了java异常。我将nil传递给JDatePanelImpl构造函数,这显然是错误的,但我不确定如何构建此属性: //This is the java definition public JDatePanelImpl(DateModel<?> model, Properties i18nStrings) { ... } ​ 代码如下 (ns jdatepickertest.core) (import

我很快就能让下面的程序开始工作了。我用的是LightTable。我在最后包含了java异常。我将nil传递给JDatePanelImpl构造函数,这显然是错误的,但我不确定如何构建此属性:

//This is the java definition
public JDatePanelImpl(DateModel<?> model, Properties i18nStrings)
{
...
}
​
代码如下

(ns jdatepickertest.core)

(import
   '(java.util Enumeration Locale Properties ResourceBundle)
   '(org.jdatepicker JDatePicker JDatePanel)
   '(org.jdatepicker.i18n)
   '(org.jdatepicker.impl JDatePanelImpl JDatePickerImpl UtilDateModel UtilCalendarModel)
)

(Locale. "pt")

(defn now [] (new java.util.Date))

(defn CreateUtilDateModel[yyyy m d]
  (doto (UtilDateModel.) (.setDate yyyy m d) (.setSelected true)))

(defn CreateJDatePanelImpl[model properties](JDatePanelImpl. model properties))

(defn CreateJDatePickerImpl[datePanel properties](JDatePickerImpl. datePanel properties))

(defn SetModelDefaultDate[model yyyy m d](. model setDate yyyy m d))

(defn GetDefaultStrings[]
  (doto(Properties.)
        (.put "text.today", "Today")
        (.put "text.nextMonth", "Next month")
        (.put "text.previousMonth", "Previous month")
        (.put "text.nextYear", "Next year")
        (.put "text.previousYear", "Previous year")
        (.put "text.clear", "Clear")
  )
)

(defn PutitAllTogether[]
  (let [model    (CreateUtilDateModel 2014 12 5)
        prop     (GetDefaultStrings)
        jdpanel  (CreateJDatePanelImpl model prop)
        jdpicker (CreateJDatePickerImpl jdpanel nil)]
  )
)

;(CreateUtilDateModel 2014 12 5)

(defn PutAlittleTogether[]
  (let[model (CreateUtilDateModel 2014 12 5)]))

;(PutAlittleTogether)

(PutitAllTogether)

好的,这是最后的节目。请注意,我是一个完全初学者clojure程序员,因此我的解决方案(在SOF的帮助下)可能不是惯用的clojure。请注意,代码中包含一些未使用的行(例如,Locale),但它们存在,因为它们可能对扩展程序有用。有用的尝试是,如何一次显示一周而不是一天?月景怎么样?如果有人点击了一天/一周/一个月,如何添加一个侦听器来传递点击的日期信息?然后,您可以做一些有用的事情,比如将其转换为java.sql.Date(或clojure的等效项)以传递给数据库函数

接下来要做的一件显而易见的事情是学习如何为这些函数编写单元测试,而我目前不知道如何做

project.clj文件

(defproject jdatepickertest "0.1.0-SNAPSHOT"
  :description "FIXME: write description"
  :url "http://example.com/FIXME"
  :license {:name "Eclipse Public License"
            :url "http://www.eclipse.org/legal/epl-v10.html"}
  :dependencies 
    [
        [org.clojure/clojure "1.6.0"]
        [org.jdatepicker/jdatepicker "1.3.4"]
    ]
)
代码core.clj

(ns jdatepickertest.core)

(import
   '(java.util Enumeration Locale Properties ResourceBundle)
   '(javax.swing JFrame)
   '(org.jdatepicker JDatePicker JDatePanel)
   '(org.jdatepicker.i18n)
   '(org.jdatepicker.impl JDatePanelImpl JDatePickerImpl UtilDateModel UtilCalendarModel)
)

(Locale. "pt")

(defn now [] (new java.util.Date))

(defn CreateAWindow[]
  (doto(JFrame. "Hello Frame")
  (.setSize 400 200)
  (.setVisible true))
)

(defn CreateUtilDateModel[yyyy m d]
  (doto (UtilDateModel.) (.setDate yyyy m d) (.setSelected true)))

(defn CreateJDatePanelImpl[model properties](JDatePanelImpl. model properties))

(defn CreateJDatePickerImpl[datePanel properties](JDatePickerImpl. datePanel properties))

(defn SetModelDefaultDate[model yyyy m d](. model setDate yyyy m d))

(defn GetDefaultStrings[]
  (doto(Properties.)
        (.put "text.today", "Today")
        (.put "text.nextMonth", "Next month")
        (.put "text.previousMonth", "Previous month")
        (.put "text.nextYear", "Next year")
        (.put "text.previousYear", "Previous year")
        (.put "text.clear", "Clear")
  )
)

(defn PutitAllTogether[]
  (let [window   (CreateAWindow)
        model    (CreateUtilDateModel 2014 12 5)
        prop     (GetDefaultStrings)
        jdpanel  (CreateJDatePanelImpl model prop)
        jdpicker (CreateJDatePickerImpl jdpanel nil)]

        (.setContentPane window jdpanel)
  )
)

;(CreateUtilDateModel 2014 12 5)

(defn PutAlittleTogether[]
  (let[model (CreateUtilDateModel 2014 12 5)]))

;(PutAlittleTogether)

(PutitAllTogether)
(ns jdatepickertest.core)

(import
   '(java.util Enumeration Locale Properties ResourceBundle)
   '(javax.swing JFrame)
   '(org.jdatepicker JDatePicker JDatePanel)
   '(org.jdatepicker.i18n)
   '(org.jdatepicker.impl JDatePanelImpl JDatePickerImpl UtilDateModel UtilCalendarModel)
)

(Locale. "pt")

(defn now [] (new java.util.Date))

(defn CreateAWindow[]
  (doto(JFrame. "Hello Frame")
  (.setSize 400 200)
  (.setVisible true))
)

(defn CreateUtilDateModel[yyyy m d]
  (doto (UtilDateModel.) (.setDate yyyy m d) (.setSelected true)))

(defn CreateJDatePanelImpl[model properties](JDatePanelImpl. model properties))

(defn CreateJDatePickerImpl[datePanel properties](JDatePickerImpl. datePanel properties))

(defn SetModelDefaultDate[model yyyy m d](. model setDate yyyy m d))

(defn GetDefaultStrings[]
  (doto(Properties.)
        (.put "text.today", "Today")
        (.put "text.nextMonth", "Next month")
        (.put "text.previousMonth", "Previous month")
        (.put "text.nextYear", "Next year")
        (.put "text.previousYear", "Previous year")
        (.put "text.clear", "Clear")
  )
)

(defn PutitAllTogether[]
  (let [window   (CreateAWindow)
        model    (CreateUtilDateModel 2014 12 5)
        prop     (GetDefaultStrings)
        jdpanel  (CreateJDatePanelImpl model prop)
        jdpicker (CreateJDatePickerImpl jdpanel nil)]

        (.setContentPane window jdpanel)
  )
)

;(CreateUtilDateModel 2014 12 5)

(defn PutAlittleTogether[]
  (let[model (CreateUtilDateModel 2014 12 5)]))

;(PutAlittleTogether)

(PutitAllTogether)