Добавление полей к проксированному классу в Clojure

Я использую "прокси" для расширения различных классов Swing в приложении GUI Clojure, обычно с кодом, который смотрит что-то как:

(def ^JPanel mypanel 
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (.drawImage g background-image 0 0 nil))))

Это работает хорошо, но я не могу выяснить, как добавить дополнительные поля к недавно расширенному классу, например, делая фоновое изображение полем, которое могло быть впоследствии обновлено. Это было бы довольно легкой и обычной практикой в Java.

Существует ли хороший способ сделать это в Clojure? Или там другой предпочтительный метод состоит в том, чтобы достигнуть того же эффекта?

9
задан mikera 16 June 2010 в 20:45
поделиться

1 ответ

Вы можете использовать что-то вроде этого:

(defn ^JPanel mypanel [state]
  (proxy [JPanel] []
    (paintComponent [#^Graphics g]
      (do
        (comment do something with state)
        (.drawImage g background-image 0 0 nil)))))

или любую другую внешнюю функцию / ref.

9
ответ дан 4 December 2019 в 21:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: