Clojure的跷跷板:我如何识别输入被按下了

Pue*_*Pop 3 swing clojure seesaw

http://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html#getKeyCode()

我不知道如何测试按下的键是否为Enter.使用以下锅炉板和(alert ...).我已经设法确定事件e是一个KeyEvent,从它的文档我看到有一个常量VK_Enter来表示Enter和三个方法getKeyChar,getKeyCodegetKeyText.使用(alert e)它似乎getKeyChar返回Enter,或者至少用Enter String表示的东西,但(= (.getKeyChar e) "Enter")返回false.如何检测Enter被按下?

(-> (frame :title "Zangalon" :content
           (text :text "Input Goes here"
                 :listen [:key-typed (fn [e] ..)]))
    pack!
    show!)
Run Code Online (Sandbox Code Playgroud)

VK_ENTER

edb*_*ond 7

一个工作的例子:

(ns user
  (:require [seesaw.core :as ui]))

(defn keypress [e]
  (let [k (.getKeyChar e)]
    (prn k (type k))
    (if (= k \newline)
      (prn "ENTER!")
      (prn "some other key"))))

(defn run []
  (-> (ui/frame :title "Zangalon" :content
                (ui/text :text "Input Goes here"
                         :listen [:key-typed keypress]))
      ui/pack!
      ui/show!))
Run Code Online (Sandbox Code Playgroud)

和输出:

\q java.lang.Character
"some other key"
\w java.lang.Character
"some other key"
\e java.lang.Character
"some other key"
\newline java.lang.Character
"ENTER!"
\newline java.lang.Character
"ENTER!"
Run Code Online (Sandbox Code Playgroud)

活动本身是:

#<KeyEvent java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar=Enter,keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=10,scancode=0,extendedKeyCode=0x0] ...>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,keyCode为0,因此.getKeyCode将不起作用.

java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
Run Code Online (Sandbox Code Playgroud)