【问题标题】:How do I make seesaw listbox react to double-click?如何使跷跷板列表框对双击做出反应?
【发布时间】:2018-01-30 01:40:41
【问题描述】:

好的,所以这可能是一个愚蠢的,但我很茫然,我为此创建了一个 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)。

【问题讨论】:

    标签: clojure seesaw


    【解决方案1】:

    Seesaw 的 listbox 函数返回一个 JListJListListSelectionModel 不提供确定ListSelectionEvent 是否是双击结果的方法。所以:selection 监听器在这里帮不上忙。

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

    【讨论】:

      猜你喜欢
      • 2014-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-20
      相关资源
      最近更新 更多