如何在Scala中检测/监听已更改的TabbedPane



背景

在这篇文章中,我看到可以在JTabbedPane上使用更改侦听器来检测新激活的选项卡的索引i

在Scala文档中,我可以看到,对于名为tpTabbedPanetp.selection.index将为我提供所需的i,但我如何连接代码以正确侦听?

我尝试遵循Scala似乎使用的reactions-listenTo范式,但在找到合适的事件类型时遇到了问题。如果你点击这个链接并点击已知的子类,我可以将一个事件列表插入到反应中,但它们似乎都没有表示TabChanged。

下面是我尝试让它发挥作用。

代码

  private val tp = new TabbedPane() {
    pages += new TabbedPane.Page("Deck0",new ScrollPane(tables(0)))
    pages += new TabbedPane.Page("Deck1",new ScrollPane(tables(1)))
    reactions += {   // not sure what to put under reactions
      case e => println("%s => %s" format(e.getClass.getSimpleName, e.toString))
    }
  }
  listenTo( tp.selection )  // don't know if this is right

更新

我已经设法在谷歌上搜索了TabbedPane.scala的代码。下面是相关的片段——我正在努力找出对我的问题的影响。

  /**
   * The current page selection
   */
  object selection extends Publisher {
    def page: Page = pages(index)
    def page_=(p: Page) { index = p.index }
    def index: Int = peer.getSelectedIndex
    def index_=(n: Int) { peer.setSelectedIndex(n) }
    peer.addChangeListener(new javax.swing.event.ChangeListener {
      def stateChanged(e: javax.swing.event.ChangeEvent) { 
        publish(SelectionChanged(TabbedPane.this))
      }
    })
  }

进一步研究我添加到OP中的UPDATE(源代码告诉所有(以及这些附加信息,我能够简单地找到一个解决方案:

import swing.event.SelectionChanged
private val tp = new TabbedPane() {
  pages += new TabbedPane.Page("Deck0",new ScrollPane(tables(0)))
  pages += new TabbedPane.Page("Deck1",new ScrollPane(tables(1)))
}
reactions += {
  case SelectionChanged( x ) => println( "changed to %d" format(tp.selection.index))
  case e => println("%s => %s" format(e.getClass.getSimpleName, e.toString))
}
listenTo( tp.selection )  // this is required

相关内容

  • 没有找到相关文章

最新更新