3

我在clojure中设置了一个swing 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))

以上依赖于doto不限于 Java 方法的事实,它只是将其第一个参数(已评估)作为随后每个形式的第一个参数插入。

我会结束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 回答