Este projetinho é minha tentativa de integrar JavaFX e Clojure de uma forma que seja realmente prática. O objetivo a atingir é um fluxo de trabalho que seja melhor que a alternativa que eu uso hoje, a saber, JavaFX + Scala.
FXML usa campos anotados com @FXML pra injetar os componentes no controlador. Em Clojure isso é impossível, porque:
-
Podemos criar campos com deftype ou defrecord, mas não é possível criar um construtor sem argumentos nesse caso, e o FXML Loader não trabalha sem um construtor de zero argumentos.
-
Com gen-class podemos criar o construtor que quisermos, mas sem campos.
Minha alternativa no momento: usar gen-class e, ao usar o loader, obter a instância do controlador criada pelo mesmo. Chamar um método nessa instância para passar ao controlador o loader ou o namespace de componentes do loader. E aí chamar os componentes com base nesse namespace.
O método no controlador pode pegar os dados e armazená-los no state usando um atom e um map.
https://stackoverflow.com/questions/25828561/javafx-how-to-get-fxml-controller
https://stackoverflow.com/questions/26962788/fxmlloader-how-to-access-the-components-by-fxid