2011-08-21 24 views

risposta

2

Più tardi, sono riuscito a trovare un modo per avere ListView pubblicato questi eventi., Si prega di fare riferimento al codice.

È il diritto di andare su di esso? C'è un modo migliore per farlo? Si prega di avvisare.

Grazie

** codice prestato e modificato **

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 
    } 
Problemi correlati