扩展矢量用于摆动操作

Sea*_*lan 3 lisp macros swing clojure

我有一个JPanel和一个JButtons矢量,并希望将每个按钮添加到面板.

我遇到的问题是我有一个代表按钮矢量的变量btns,但宏函数只是将其视为符号,而不是矢量.有办法以某种方式扩展它吗?

这是代码:

(defmacro add_all [panel btns]
   ;; help?
)

(let [x 10, y 10
      btns get_buttons] ;; just a vector of JButton objects    
   (doto (JPanel.)
      (.setLayout (GridLayout. x y))
      (add-all btns)))
Run Code Online (Sandbox Code Playgroud)

我希望这扩展到:

(doto (JPanel.)
     (.setLayout (GridLayout. x y))
     (.add (btns 0))
     (.add (btns 1))
     ;; etc
     (.add (btns 99)))
Run Code Online (Sandbox Code Playgroud)

ama*_*loy 5

不需要宏(事实上,所描述的问题不能通过宏来解决).只需编写一个在面板和一系列按钮上运行的功能:

(defn add-all [panel buttons]
  (doseq [button buttons]
    (.add panel button)))
Run Code Online (Sandbox Code Playgroud)