0

I am very close to getting the program below to work. I am using LightTable. I have included the java exception at the end. I am passing in a nil to the JDatePanelImpl constructor which is clearly wrong, but I am not sure how to build this property:

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

This the 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"]
    ]
)

Code follows

(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)
Ivan
  • 7,448
  • 14
  • 69
  • 134

1 Answers1

2

Ok here is the final program. Please be aware that I am a complete beginner clojure programmer, hence my solution (with much help from SOF) may not be idiomatic clojure. Note that the code contains some lines that are not used (e.g., Locale), but they are there because they are likely useful to extend the program. Useful things to try are, how to display a week at a time instead of a day? What about month view? If someone clicks on a day/week/month, how to add a listener that gets passed the date information clicked? Then you can do useful things like cast it to a java.sql.Date (or clojure's equivalent) to pass to a database function.

The next obvious thing to do is to learn how to write unit tests for these functions, which I don't currently know how to do.

The project.clj file

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

The code 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)
Ivan
  • 7,448
  • 14
  • 69
  • 134