2017-05-13 5 views
0

私はListViewを表示し、ユーザーがキーボードと変更されていないキーを使用して複数の行を素早く選択できるようにしたい。 Scala(またはJava)は、タイプされたキーを使用して、最初の文字と一致する行を選択し、以前選択した他のすべての行を選択から削除します。代わりに選択肢に追加します。Scala/SwingでデフォルトのListViewキーの動作を無効または無効にするにはどうすればよいですか?

lv.reactions += { 
    case e: KeyTyped if e.modifiers == 0 => { 
    val pos = labels.indexOf(e.char) 
    if (pos >= 0 && pos < lv.listData.items.size) { 
     e.consume() 
     if (lv.selection.indices.contains(pos)) { 
     lv.selection.indices -= pos 
     } else { 
     lv.selection.indices += pos 
     } 
     // Need some kind of notification here to update the display 
    } 
    } 
} 

編集:

は、ここでラベルは行番号に文字をマップIndexedSeq [シャア]で、LVが以前のListViewのように定義されて、私が試したものの一つだ私が入れてと思いましたe.consume()の直後に最初のifが元の質問に回答しましたが、それ以上のテストではそうではありません。私の電話の後に何かがまだ選択を変えています。 私が速く入力すると、それは起こりません。ですから、私のプログラムで選択リストを変更するにはどうしたらいいですか?選択リストが変更されたことを知らせるために何かが必要なように見えます。非常に速く入力すると選択したものが表示されますが、ゆっくり入力すると最後に入力したものだけが選択されます。 lv.repaint()は何もしません。

newSelは行動の変化なしとに/ lv.selection.indicesから要素posを追加またはドロップの結果であるIはまたlv.peer.setSelectionIndices(newSel.toArray)を試みました。

私のコード内のコメントがどこにあるか私も

val r = new Range(0, lv.listData.indices.size, 1) 
lv.publish(new ListSelectionChanged(lv, r, false)) 

を試してみました。

答えて

0

(OPに代わって掲載された解決策)

"解決策"は、プロジェクトをscalaFXに変換することでしたが、ListViewにはその動作がありません。変換はあまり難しくありませんでした。

関連する問題