简单clojure java interop(swing)程序不能相当得到它的工作 [英] Simple clojure java interop (swing) program can't quite get it to work

查看:311
本文介绍了简单clojure java interop(swing)程序不能相当得到它的工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我很接近让下面的程序工作。我使用LightTable。我已经包括java异常在结束。我传递一个nil到JDatePanelImpl构造函数,这显然是错误的,但我不知道如何构建此属性:

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)
{
...
}
​

这是project.clj

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

代码如下

(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的等价物)传递给数据库函数。

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.

project.clj文件

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

代码core.clj

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)

这篇关于简单clojure java interop(swing)程序不能相当得到它的工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆