Событие 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 изменения выбора?

0 ответов

Другие вопросы по тегам