2011-08-21 6 views
5

を追加Scalaのスイングリストビューの削除/、これを参照すると、要素のイベント

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

私はlistDataを変更することにより、ListView内容を変更することができます。しかし、ListViewにはこれらのイベントを公開することができませんでした。ListElementsAddedListElementsAddedListChangedListViewソースの外観からは、読み取り専用の空のモデルにのみリスナーが追加されます。これについてどうすればいいですか?

おかげで

答えて

2

その後、私は、ListViewコントロールはこれらのイベントを公開している方法を把握するために管理。、コードを参照してください。

これについて行く権利はありますか?これを行うより良い方法はありますか?お知らせ下さい。

おかげ

**コード借りて修正**

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 
    } 
関連する問題