1

好的,所以这可能是一个愚蠢的,但我很茫然,我为此创建了一个 SOF 帐户。这几乎可以满足我的要求:

(let [lb (listbox :model ["a" "b" "c"])]
  (listen lb :selection
    (fn [e] (alert (selection lb))))
(-> (frame :content lb)
  pack! show!))

如果您运行此代码,您将看到一个包含三个条目(a、b、c)的列表框。如果您单击其中任何一个,则会弹出一个警报,其中包含该条目。我想要做的是让列表框以这种方式对双击而不是单击做出反应。我应该怎么做?

对于那些告诉我如何使双击项目的编号出现在弹出窗口中的人(0 代表 a,1 代表 b,2 代表 c)的人,我感到非常荣幸。

4

1 回答 1

1

Seesaw 的listbox函数返回一个JList. AJListListSelectionModel提供确定 是否ListSelectionEvent是双击结果的方法。因此,:selection听众在这里无济于事。

另一方面,MouseEvent确实提供getClickCount了 ,可用于检测双击。因此,您可以改用:mouse-clicked侦听器,并过滤双击。然后你需要做的就是找到ListItem与点击位置对应的那个。幸运的是,JList提供了locationToIndex一种可用于此目的的方法。 这个对“ JList 元素上的双击事件”的回答将这些部分组合在一起用于 Java。Clojure/Seesaw 的翻译如下所示:

(listen lb :mouse-clicked
        (fn [ev]
          (when (= 2 (. ev getClickCount))
            (let [index (. list locationToIndex (. ev getPoint))]
              <... do something with the index / list item ...>))))
于 2017-08-21T23:22:52.337 回答