Расширение вектора для операций свинга - PullRequest
3 голосов
/ 20 ноября 2011

У меня есть 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)))

Я бы хотел расширить это до:

(doto (JPanel.)
     (.setLayout (GridLayout. x y))
     (.add (btns 0))
     (.add (btns 1))
     ;; etc
     (.add (btns 99)))

1 Ответ

5 голосов
/ 20 ноября 2011

Нет необходимости в макросе (и действительно, как указано, проблема не может быть решена с помощью макроса). Просто напишите функцию, которая работает на панели, и последовательность кнопок:

(defn add-all [panel buttons]
  (doseq [button buttons]
    (.add panel button)))
...