首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >侦听器seesaw.core clojure

侦听器seesaw.core clojure
EN

Stack Overflow用户
提问于 2016-09-29 19:49:46
回答 1查看 174关注 0票数 0

一位新来的克洛尔。

我想和大家分享一种对我来说很奇怪的行为,但这可能是完全没有问题的。我遵循了关于github https://gist.github.com/daveray/1441520#file-seesaw-repl-tutorial-clj-L381的教程,更准确地说,我应该在标签中添加一个侦听器。让我们创建一个构造函数并显示助手:

代码语言:javascript
复制
(defn make-lb [s]
  (listbox :model (-> (symbol s) ns-publics keys sort)))
(defn display [content frame]
  (config! frame :content content)
  content)

这是非常有效的:

代码语言:javascript
复制
(def lb (make-lb "clojure.core"))
(display (scrollable lb) f)
(listen lb :selection (fn [e] (println "Selection is " (selection e))))

然而,这并不是:

代码语言:javascript
复制
(def lb (scrollable (make-lb "clojure.core")))
(display lb f)
(listen lb :selection (fn [e] (println "Selection is " (selection e))))

注意不同的“可滚动”安置。在第二种情况下,compilier告诉我“未知事件类型:选择seesaw.util/非法-参数(utils.clj:19)"

我看不出为什么第一个片段可以工作,而第二个片段不工作。我对Swing和/或其他Java库一无所知

EN

回答 1

Stack Overflow用户

发布于 2016-09-30 05:20:50

为什么这个不行?(默示)

tl;dr

  • listboxscrollable返回不同的东西

详细信息

  • 查看不同调用的返回值(为清晰起见,包含原始make-lb ):
代码语言:javascript
复制
(defn make-lb [s]
  (listbox :model (-> (symbol s) ns-publics keys sort)))

(class (make-lb "clojure.core"))
;;=> seesaw.core.proxy$javax.swing.JList$Tag$fd407141

(class (scrollable (make-lb "clojure.core")))
;;=> seesaw.core.proxy$javax.swing.JScrollPane$Tag$fd407141
  • 为了我们的目的,我们只是说listbox返回一个JListscrollable返回一个JScrollPane
  • 在此情况下,对display的调用是等效的
  • 但是,对listen的调用并不等价。
代码语言:javascript
复制
- In the first case, `lb` resolves to a `JList`, and in the second case, `lb` resolves to a `JScrollPane`

更多细节

  • 如果我们在seesaw.event中查看,我们会看到以下内容:

::选择是为每个类专门处理的人工事件。 小部件,所以我们黑了..。

代码语言:javascript
复制
- You'll notice that there's a case for `JList`, but not for `JScrollPane`

  • JScrollPane的情况下,人工:selection被简单地从对resolve-event-aliases的调用中返回。
代码语言:javascript
复制
- Since this isn't a "real selection type", it's only a matter of time before things go pear-shaped

  • 果然,get-or-install-handlers试图查找:selection,什么也得不到,并调用(illegal-argument "Unknown event type %s" event-name)event-name绑定到:selection,这与您收到的异常相匹配。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39778821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档