Событие Scala ListViewSelectionChange выводит неожиданный диапазон
В настоящее время я пытаюсь использовать scala.swing.ListView в приложении Scala.
Я в основном хочу получить выбранный элемент 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 не указано, как работает этот API.
Кто-нибудь знает, что я здесь делаю не так? Может ли это быть неправильным событием для реагирования на ListView
изменения выбора?