2011-08-21 13 views

Respuesta

2

Más tarde, me las arreglé para encontrar una manera de tener ListView publicó estos eventos., Consulte el código.

¿Es el derecho de hacerlo? ¿Hay una mejor manera de hacer esto? Por favor avise.

Gracias

** código prestado y modificado **

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 
    }