I have some problems with using swing from clojure. Starting from the
working choice list:
(defn direct-ui
""
[]
(let [
tmp-my-list (doto (new DefaultListModel)
(.addElement "Item1")
(.addElement "Item2")
(.addElement "Item3"))
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
I want to read the elements in the ChoiceList ("Item1"..."Item3") from
a vector. So I wrote a function:
(defn new-list-fn [l]
(concat '(doto (new DefaultListModel)) (map #(list '.addElement %)
l)))
the function returns exactly the vector I want:
user> (new-list-fn ["Item1" "Item2" "Item3"])
(doto (new DefaultListModel) (.addElement "Item1") (.addElement
"Item2") (.addElement "Item3"))
but if I use it inside the let-construction as in:
(defn function-ui
""
[]
(let [
my-list ["Item1" "Item2" "Item3"]
tmp-my-list (new-list-fn my-list)
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
I get the error:
No matching ctor found for class javax.swing.JList
[Thrown class java.lang.IllegalArgumentException]
I tested also using a macro:
(defmacro new-list-macro [l]
(concat '(doto (new DefaultListModel)) (map #(list '.addElement %)
l)))
it works when calling directly with the vector:
(defn macro-ui
""
[]
(let [
tmp-my-list (new-list-macro ["Item1" "Item2" "Item3"])
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
but not when calling:
(defn macro-ui
""
[]
(let [
my-list ["Item1" "Item2" "Item3"]
; tmp-my-list (new-list-macro ["Item1" "Item2" "Item3"])
tmp-my-list (new-list-macro my-list)
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
then I get:
java.lang.IllegalArgumentException: Don't know how to create ISeq
from: Symbol
[Thrown class java.lang.RuntimeException]
Can anyone help with a hint?
Regards
Volker
The whole code I used:
(ns rudi
(:import (javax.swing DefaultListModel ListSelectionModel JMenu
JMenuBar JMenuItem JButton JFrame JLabel JList JPanel
JTextField JTextArea
SwingUtilities))
(:import (javax.accessibility))
(:import (java.io IOException PrintStream OutputStream))
(:use (clojure.contrib
[miglayout]
[swing-utils])))
(defmacro new-list-macro [l]
(concat '(doto (new DefaultListModel)) (map #(list '.addElement %)
l)))
(defn new-list-fn [l]
(concat '(doto (new DefaultListModel)) (map #(list '.addElement %)
l)))
(defn direct-ui
""
[]
(let [
tmp-my-list (doto (new DefaultListModel)
(.addElement "Item1")
(.addElement "Item2")
(.addElement "Item3"))
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
(defn macro-ui
""
[]
(let [
my-list ["Item1" "Item2" "Item3"]
tmp-my-list (new-list-macro ["Item1" "Item2" "Item3"])
;tmp-my-list (new-list-macro my-list)
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
(defn function-ui
""
[]
(let [
my-list ["Item1" "Item2" "Item3"]
tmp-my-list (new-list-fn my-list)
ChoiceList (new JList tmp-my-list)
panel (miglayout (JPanel.)
ChoiceList)
Frame (doto (new JFrame "Set choice")
(.setDefaultCloseOperation JFrame/DISPOSE_ON_CLOSE)
(.add panel)
(.pack)
(.setVisible true))]
(println "done\n")))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---