我正在按照 TableView 示例做一些 JavaFX 的事情。在原始 java 中,作者 @Override
的几个 TableCell
类方法是他直接派生的,而且 @Override
的 updateItem
方法,它在类层次结构中向上 2 层,属于 Cell
类。
有什么方法可以在 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)))))
最佳答案
我需要将参数 item
和 empty
传递给 proxy-super
调用...所以 (proxy-super updateItem项为空)
关于java - 在 Clojure 中覆盖 java 父类(super class)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18410160/