如何覆盖或禁用Scala/Swing中的默认ListView键行为?

如何覆盖或禁用Scala/Swing中的默认ListView键行为?,swing,scala,Swing,Scala,我想显示一个列表视图,并允许用户使用键盘和未修改的键从中快速选择多行。Scala(或Java)使用键入的任何键来选择与第一个字符匹配的行,并从选择中删除所有其他先前选择的行。我想把它添加到选择中 这里是我尝试过的一件事,lv以前被定义为ListView,labels是一个IndexedSeq[Char],它将字符映射到一个行号: lv.reactions += { case e: KeyTyped if e.modifiers == 0 => { val pos = label

我想显示一个列表视图,并允许用户使用键盘和未修改的键从中快速选择多行。Scala(或Java)使用键入的任何键来选择与第一个字符匹配的行,并从选择中删除所有其他先前选择的行。我想把它添加到选择中

这里是我尝试过的一件事,lv以前被定义为ListView,labels是一个IndexedSeq[Char],它将字符映射到一个行号:

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
    }
  }
}
我的代码中的注释是。

(代表OP发布解决方案)

“解决方案”是将项目转换为scalaFX,而ListView没有这种行为。转换不是很困难

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