Swing 如何在Scala中检测/侦听已更改的选项卡窗格?
背景 在这里,我看到可以在Swing 如何在Scala中检测/侦听已更改的选项卡窗格?,swing,scala,event-handling,Swing,Scala,Event Handling,背景 在这里,我看到可以在JTabbedPane上使用更改侦听器来检测新激活选项卡的索引I 在Scala文档中,我可以看到,对于名为tp的TabbedPane,tp.selection.index将为我提供所需的I,但我如何连接代码以正确侦听 我试图遵循Scala似乎使用的反应列表范例,但在找到合适的事件类型时遇到了问题。如果你点击并点击已知的子类,有一个事件列表,我可以将其插入到反应中,但它们似乎都没有改变 下面是我的尝试,让这个工作 代码 private val tp = new Tab
JTabbedPane
上使用更改侦听器来检测新激活选项卡的索引I
在Scala文档中,我可以看到,对于名为tp
的TabbedPane
,tp.selection.index
将为我提供所需的I
,但我如何连接代码以正确侦听
我试图遵循Scala似乎使用的反应列表
范例,但在找到合适的事件类型时遇到了问题。如果你点击并点击已知的子类,有一个事件列表,我可以将其插入到反应中,但它们似乎都没有改变
下面是我的尝试,让这个工作
代码
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
更新
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
我已经设法用谷歌搜索了。下面是相关的片段——我正试图找出我的问题的含义
/**
* 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(source tells all)中的更新,我可以简单地找到一个解决方案:
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
那更好。不是很直观;它只是不能像你期望的那样工作。