如何使跷跷板列表框对双击做出反应?
How do I make seesaw listbox react to double-click?
好吧,这可能有点傻,但我不知所措,所以我为此创建了一个 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)。
Seesaw 的listbox
函数returns a JList
. A JList
's ListSelectionModel
does not provide a way to determine whether the ListSelectionEvent
是双击的结果。所以 :selection
听众在这里无济于事。
另一方面,MouseEvent
确实提供了getClickCount
,可用于检测双击。因此,您可以改用 :mouse-clicked
侦听器,并对双击进行过滤。然后你需要做的就是找到与点击位置对应的ListItem
。幸运的是,JList
提供了一个 locationToIndex
方法可以用于此目的。 This answer to "Double-click event on JList element" 将这些部分放在一起 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 ...>))))
好吧,这可能有点傻,但我不知所措,所以我为此创建了一个 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)。
Seesaw 的listbox
函数returns a JList
. A JList
's ListSelectionModel
does not provide a way to determine whether the ListSelectionEvent
是双击的结果。所以 :selection
听众在这里无济于事。
另一方面,MouseEvent
确实提供了getClickCount
,可用于检测双击。因此,您可以改用 :mouse-clicked
侦听器,并对双击进行过滤。然后你需要做的就是找到与点击位置对应的ListItem
。幸运的是,JList
提供了一个 locationToIndex
方法可以用于此目的。 This answer to "Double-click event on JList element" 将这些部分放在一起 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 ...>))))