2011-08-21 27 views
5

Với tham chiếu đến nay,Scala Swing ListView của/Thêm Elements Sự kiện

How do I change the contents of a ListView in Scala?

tôi có thể thay đổi ListView nội dung bằng cách thay đổi listData. Tuy nhiên, tôi không thể nhận được ListView để xuất bản các sự kiện này, ListElementsAdded, ListElementsAddedListChanged. Từ giao diện của nguồn ListView, nó sẽ chỉ thêm một người nghe vào một mô hình rỗng chỉ đọc. Làm thế nào để tôi đi về điều này?

Cảm ơn

Trả lời

2

Sau đó, tôi đã tìm ra cách để ListView xuất bản các sự kiện này. Vui lòng tham khảo mã.

Bạn có quyền tham gia không? Có cách nào tốt hơn để làm điều này? Xin cho biết.

Cảm ơn

** đang mượn và sửa đổi **

object ListViewTest extends SimpleSwingApplication 
{ 
    lazy val top = new MainFrame 
    { 
    title = "ListView Test" 
    contents = new BoxPanel(Orientation.Vertical) 
    { 
     border = Swing.EmptyBorder(2, 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 
    } 
Các vấn đề liên quan