跷跷板键事件不触发



我试图在我的跷跷板框架上收听:键按和:键释放事件,但事件没有发射。我已经将问题缩小到一个列表框——当列表框出现时,框架不再捕获关键事件。下面是我的代码的简化版本,它显示了这种行为:

(ns ainur.example
  (:use seesaw.core))
(let [lst (listbox :model ["Chiptune" "Sinewave"])
      f (frame :title "Ainur"
             :on-close :exit
             :size [1024 :by 768]
             :content (border-panel :hgap 10 :vgap 10
                                    :center (label "Center")
                                    :north (label "North")
                                    :south (label "South")
                                    :west lst))]
(listen lst :selection (fn [e]
                         (let [active-inst (selection e)]
                           (println active-inst))))
(listen f
        :key-pressed (fn [e]
                       (println "Key pressed"))
        :key-released (fn [e]
                        (println "Key released")))
(invoke-later
 (native!)
 (show! f)))

谁能帮我弄清楚为什么关键事件没有被触发?任何帮助都会非常感激。提前感谢!

我把这个问题贴在了seesaw的Google组里,seesaw的创建者Dave Ray给了我一个很好的回答。我把它贴在这里,以防其他人遇到这个问题:

"嗨。一旦层次结构中有另一个小部件(如列表框),它就会捕获键盘焦点,因此事件永远不会到达框架。我认为最好的办法是把键监听器放在嵌套的小部件上,比如面板,然后给它键盘焦点。下面是一个类似的例子:

https://github.com/daveray/regenemies/blob/master/src/regenemies/ui.clj L163

key-typed事件被绑定到画布上,然后. requestfocusinwindow被用来给它键盘焦点。" 非常感谢,Dave!

相关内容

  • 没有找到相关文章

最新更新