加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读