2017-08-21 5 views
1

これは愚かなものかもしれませんが、私はそのような喪失で私はSOFアカウントを作成しました。このコードを実行する場合はシーソーリストボックスをダブルクリックするとどう反応しますか?

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

あなたは3つのエントリでリストボックスが表示されます(A、B、C): は、ここで私が欲しいものはほとんどないことです。それらのいずれかをクリックすると、その中のその項目で警告がポップアップ表示されます。 私がしたいのは、リストボックスをダブルクリックではなくダブルクリックに反応させることです。それについてどうすればいいですか?

ダブルクリックしたアイテムの番号をポップアップに表示する方法を教えてくれる人達には特別な名声があります(aは0、bは1、cは2)。

答えて

1

シーソーのlistbox関数は、JListを返します。 JListListSelectionModelは、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 ...>)))) 
関連する問題