Scala Swing ListView的删除/添加元素事件
发布时间:2020-12-16 18:32:31 所属栏目:安全 来源:网络整理
导读:参考这个, How do I change the contents of a ListView in Scala? 我可以通过更改listData来更改ListView内容.但是,我无法让ListView发布这些事件,ListElementsAdded,ListElementsAdded和ListChanged.从ListView源代码的外观来看,它只会向只读空模型添加一
参考这个,
How do I change the contents of a ListView in Scala? 我可以通过更改listData来更改ListView内容.但是,我无法让ListView发布这些事件,ListElementsAdded,ListElementsAdded和ListChanged.从ListView源代码的外观来看,它只会向只读空模型添加一个侦听器.我该怎么做? 谢谢 解决方法
后来,我设法找到了让ListView发布这些事件的方法.请参考代码.
有权利去做吗?有一个更好的方法吗?请指教. 谢谢 **借用和修改的代码** object ListViewTest extends SimpleSwingApplication { lazy val top = new MainFrame { title = "ListView Test" contents = new BoxPanel(Orientation.Vertical) { border = Swing.EmptyBorder(2,2,2) val listModel = new DefaultListModel List("First","Second","Third","Fourth","Fifth").map(listModel.addElement(_)) val myList = ListBuffer() val listView = new ListView[String](myList) { selection.intervalMode = ListView.IntervalMode.Single peer.setModel(listModel) //listData = myList } listView.peer.getModel.addListDataListener(new ListDataListener { def contentsChanged(e: ListDataEvent) { publish(ListChanged(listView)) } def intervalRemoved(e: ListDataEvent) { publish(ListElementsRemoved(listView,e.getIndex0 to e.getIndex1)) } def intervalAdded(e: ListDataEvent) { publish(ListElementsAdded(listView,e.getIndex0 to e.getIndex1)) } }) contents += new ScrollPane(listView) val label = new Label("No selection") contents += label val b = new Button("Remove") contents += b listenTo(listView.selection,listView,b) reactions += { case ListSelectionChanged(list,range,live) => label.text = "Selection: " + range case e: ButtonClicked => if (listView.listData.isEmpty) { b.enabled = false } else { listView.peer.getModel.asInstanceOf[DefaultListModel].remove(listView.selection.anchorIndex) } case ListElementsRemoved(source,range) => println("Element at " + (range.start + 1) + " is removed.") } } pack } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |