3

私は clojure でスイング UI をセットアップしており、次のようなブロックがあります。

  (doto main-frame
    (.setUndecorated true)
    (.setExtendedState Frame/MAXIMIZED_BOTH)
    (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
    (.setVisible true)
    )

でも今は電話したい

(.setBackground (.getContentPane main-frame) Color/BLACK)

フレームを可視に設定する前に、doto を終了して (.instanceMember instance args*) 構文を使用するよりも良い方法はありますか?

4

1 に答える 1

5

あなたが本当にシングルが欲しいならdoto、多分これはそうするでしょう:

(doto main-frame
  (.setUndecorated true)
  (.setExtendedState Frame/MAXIMIZED_BOTH)
  (.setDefaultCloseOperation JFrame/EXIT_ON_CLOSE)
  (-> (.getContentPane) (.setBackground Color/BLACK))
  (.setVisible true))

上記は、Javaメソッドに限定されないという事実に依存しておりdoto、後続のすべてのフォームの最初の引数として最初の引数(評価済み)を挿入するだけです。

doto上記はあまり読みにくいので、私はしかし終了することにします。あるいは、set-background-on-content-pane関数(明らかにをとる)を定義し、それを:main-frameで使用することもできます。doto

(defn set-bg-on-frame [fr color] (.setBackground (.getContentPane fr) color))

(doto main-frame
   .
   .
   .
   (set-bg-on-frame Color/BLACK)
   (.setVisible true))
于 2012-04-17T10:58:11.227 に答える