2013-08-23 2 views
2

Я делаю некоторые вещи JavaFX, следуя примеру TableView. В исходной java автор @Override с некоторыми из методов класса TableCell, которые он выводит непосредственно, а также @Override s метод updateItem, который имеет 2 уровня в иерархии классов и принадлежит классу Cell.Переопределение метода суперкласса Java в Clojure

Есть ли способ сделать это легко в 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))))) 

ответ

1

мне нужно передать аргументы item и empty к proxy-super вызову ... так (proxy-super updateItem item empty)

Смежные вопросы