Scala ListViewSelectionChange事件输出意外范围

时间:2014-07-21 17:16:56

标签: swing scala listview selectionchanged scala-swing

我目前正在尝试在Scala应用程序中使用scala.swing.ListView。

一旦选择发生变化,我基本上想要获取ListView的选定项目。

这里有一个可以粘贴到Scala提示符中的示例。

import scala.swing._

class MainView extends MainFrame {

  import ListView._
  val selector = new ListView(List[Int]()) {
    renderer = Renderer(x => x.toString)
    selection.reactions += {
      case event.ListSelectionChanged(source, range, _) =>
        if(!range.isEmpty) {
          println("selection " + range)
        }
    }
    selection.intervalMode = IntervalMode.Single
  }

  selector.listData = 1 +: selector.listData
  selector.listData = 2 +: selector.listData
  selector.listData = 3 +: selector.listData
  selector.listData = 4 +: selector.listData
  selector.listData = 5 +: selector.listData

  contents = new GridBagPanel(){
    layout(new ScrollPane(selector))  = new Constraints() {
      gridx = 0
      gridy = 0
      weighty = 1
      fill = GridBagPanel.Fill.Vertical
    }
  }
  visible = true
}

var view = new MainView()

如果我现在选择列表中的第一个元素,我希望Range只包含0,如果我然后选择第二个元素,我只期望1和等等。

但是,如果我选择第一个元素,然后选择第二个元素,则Range包含(0, 1)。如果我选择第五个元素然后选择第三个元素,则范围包含(2, 3, 4)

因此,范围始终包含最后一个和当前所选项目之间的范围,按升序排列。

可悲的是,Scala documentation没有说明此API的工作原理。

有谁知道我在这里做错了什么?这可能是对ListView选择更改作出反应的错误事件吗?

0 个答案:

没有答案