如何使跷跷板列表框做出双击反应?

时间:2017-08-21 22:15:45

标签: clojure seesaw

好吧,所以这可能是一个愚蠢的,但我很遗憾,我为此创建了一个SOF帐户。 这就是我想做的事情:

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

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

告诉我如何使双击项目的编号出现在弹出窗口中(0表示a,1表示b,2表示c)。

1 个答案:

答案 0 :(得分:1)

跷跷板的listbox函数返回JListJList的{​​{3}}没有提供确定ListSelectionModel是否是双击结果的方法。所以:selection听众在这里没有帮助。

另一方面,MouseEvent确实提供getClickCount,可用于检测双击。因此,您可以使用:mouse-clicked侦听器,并过滤双击。然后,您需要做的就是找到与点击位置对应的ListItem。幸运的是,JList提供了可用于此目的的locationToIndex方法。 ListSelectionEvent到“This answer”将这些部分放在一起用于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 ...>))))