【问题标题】:Simple clojure java interop (swing) program can't quite get it to work简单的 clojure java interop (swing) 程序不能让它工作
【发布时间】:2014-12-05 19:13:16
【问题描述】:

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

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

这是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"]
    ]
)

代码如下

(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)

【问题讨论】:

    标签: java swing clojure


    【解决方案1】:

    好的,这是最后的程序。请注意,我是一个完整的初学者 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-26
      • 1970-01-01
      • 2015-08-01
      相关资源
      最近更新 更多