2014年3月24日星期一

clojure调用javaFX

知其然,不知其所以然,大概我就是这种人。不多说直接上代码:


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
(ns myproject.core
  (javafx.embed.swing.JFXPanel.)
  (:import [javafx.application Application]
           [javafx.event ActionEvent EventHandler]
           [javafx.scene Scene]
           [javafx.scene.layout VBox StackPane]
           [javafx.stage Stage]
           [javafx.scene.control Button])
  (:gen-class :extends javafx.application.Application)
  )

(defn -start [this stage]
  (def pane (StackPane.))
  (def btn (Button. "xxxx"))
  (.setOnAction btn (proxy [EventHandler] [] (handle [event] (println "click" event))))
  (.. pane (getChildren) (add btn))
  (def scene (Scene. pane 300 200))
  (doto stage (.setScene scene) (.setTitle "zxxxxz") (.show))
  )
(defn -stop [app]
  (println "Exiting now"))

(Application/launch myproject.core (into-array String []))

注意命名空间里面的:(javafx.embed.swing.JFXPanel.);这句话非常重要,如果没有你会得到一个运行错误,说什么Toolkit如何如何。加上就好了。至于原因,over stack网站上似乎有解释,但是我是一个不求甚解的人,所以其实就是基于某些原因,普拉普拉普拉。

注意如果你使用的是intellij,注意配置:










没有评论: