我目前正在尝试在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
选择更改作出反应的错误事件吗?