2

TableViewの例に従って、JavaFXのことをやっています。元の Java では、作成者は直接派生する@Overrideいくつかのクラス メソッドを持っていますが、クラス階層の 2 レベル上にあり、クラスに属するメソッドも持っています。TableCell@OverrideupdateItemCell

Clojureでこれを簡単に行う方法はありますか? 現在、私はやっているだけですが、必要に応じproxyて使用しても大丈夫です。:gen-classClojure の直接の基本クラスのみをオーバーライドできる場所をどこかで読んだと思いました。

(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