2013-08-04 38 views
1

我的自定義子類Page有問題。這是一個簡短的例子。Scala TabbedPane自定義頁面子類

def main(args: Array[String]): Unit = { 
    val pane = new TabbedPane 
    pane.pages += new LanguagePage("common_yes", new Label) 
    println(pane.pages(0).isInstanceOf[LanguagePage]) 
} 

class LanguagePage(languageKey: String, com: Component) 
    extends Page("", com, null) { 

    def method() {...} 
} 

當我運行程序時,打印出false。很高興知道爲什麼會發生這種情況,以及我如何再次訪問我添加的頁面。在我的情況下,我需要運行子類必須根據設置的語言調整標題字符串的方法。

回答

0

如果你看一下源

class TabbedPane extends Component with Publisher { 
    object pages extends BufferWrapper[Page] { 
    def apply(n: Int) = 
     new Page(TabbedPane.this, peer.getTitleAt(n), 
     UIElement.cachedWrapper[Component] 
     (peer.getComponentAt(n).asInstanceOf[javax.swing.JComponent]), 
     peer.getToolTipTextAt(n)) 

你總是得到一個新的實例。在

class TabbedPane extends Component with Publisher { 
    object pages extends BufferWrapper[Page] { 

    def +=(t: Page): this.type = { 
    t.parent = TabbedPane.this 
    peer.addTab(t.title, null, t.content.peer, t.tip) 
    this 
    } 

t不被記錄在所有的參數

展望。

但你可以改變使用

pane.pages(0).title = "Title 2" 

,所以你可以定義一個邏輯頁面(除了搖擺頁面同伴)分別稱號。使用對窗格和標籤索引的引用,該類可以更改標題。

+0

謝謝!我現在將選項卡索引映射到生成選項卡標題所需的所有數據。然後我遍歷地圖並設置所有標籤的標題。 – Kigyo