2014-12-05 41 views
0

我非常接近讓下面的程序工作。我正在使用LightTable。我在最後包含了java異常。我傳遞一個零到JDatePanelImpl構造明知是錯的,但我不知道如何構建這個屬性:簡單的clojure java interop(swing)程序不能完全讓它起作用

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

回答

2

好的,這裏是最終的計劃。請注意,我是一個完整的初學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)