2

我正在按照 TableView 示例做一些 JavaFX 的东西。在原始 java 中,作者提供了他直接派生@Override的几个类方法,但也是类层次结构中的 2 级并属于该类的方法。TableCell@OverrideupdateItemCell

在 Clojure 中有什么方法可以轻松做到这一点吗?目前我只是在做,但如有必要proxy我可以使用。:gen-class我以为我在某个地方读到了你只能覆盖 Clojure 中的直接基类。

(defn make-editing-cell []
  (let [textField (atom nil)]
    (proxy [TableCell] []
      (startEdit []
        (proxy-super startEdit)
        (println "start editing"))

      (cancelEdit []
        (proxy-super cancelEdit)
        (println "cancel editing"))

      (updateItem [item empty]
        ;(proxy-super updateItem  ) ;; This causes runtime error No Matching Field Found
        (if empty
          (do (println "empty!")
              (doto this
                (.setText nil)
                (.setGraphic nil)))
          (do (println "not empty!")
              (if (.isEditing this)
                (do (println "editing")
                    (if (not @textField)
                      (.setText @textField (.toString (.getItem this))))
                    (doto this
                      (.setGraphic @textField)
                      (.setContentDisplay ContentDisplay/GRAPHIC_ONLY)))
                (do (println "not editing")
                    (println this)
                    (println (.getItem this))
                    (comment
                      (doto this
                        (.setText (.toString (.getItem this)))
                        (.setContentDisplay ContentDisplay/GRAPHIC_ONLY)))))))
        (println "updating item" item empty)))))
4

1 回答 1

1

我需要传递参数itemempty调用proxy-super......所以(proxy-super updateItem item empty)

于 2013-08-23T20:18:03.460 回答