2015-07-09 2 views
2

Я пытаюсь прослушать: нажатие клавиш и: выпущенные на клавиатуре события на моем кадре Seesaw, но события не срабатывают. Я сузил проблему до списка - когда присутствует список, кадр больше не захватывает ключевые события. Вот упрощенная версия моего кода, который показывает поведение:Невозможно сжечь ключевые события из-за сияния

(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))) 

Может кто-нибудь помочь мне понять, почему ключевые события не срабатывает? Любая помощь могла бы быть полезна. Заранее спасибо!

ответ

0

Я разместил этот вопрос в группе Google из качелей и получил отличный ответ от создателя Seesaw, самого Дейва Рэя. Я размещаю его здесь, если кто-то еще сталкивается с этой проблемой:

«Привет. Когда есть еще один виджет в иерархии, такой как список, он захватывает фокус клавиатуры, поэтому события никогда не попадают в рамку. ставка будет поставить ключ слушателя вложенного виджета, как панели, а затем дать ему фокус клавиатуры разновидность подобного примера можно увидеть здесь:.

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

The: ключ типизированных событие неизбежно холст, а затем .requestFocusInWindow используется, чтобы придать ему фокус на клавиатуре ».

Большое спасибо, Дейв!

Смежные вопросы