9

私は「プロキシ」を使用して、Clojure GUIアプリケーションでさまざまなSwingクラスを拡張しています。通常、次のようなコードを使用しています。

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

これはうまく機能しますが、新しく拡張されたクラスにフィールドを追加する方法がわかりません。たとえば、background-imageを後で更新できるフィールドにするなどです。これは、Javaでは非常に簡単で一般的な方法です。

Clojureでこれを行う良い方法はありますか?または、同じ効果を達成するための別の好ましい方法はありますか?

4

1 に答える 1

9

次のようなものを使用できます。

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

または、他の外部関数/参照を使用します。

于 2010-06-16T20:59:19.273 に答える