2013-08-04 8 views
1

사용자 정의 서브 클래스 Page에 문제점이 있습니다. 다음은 간단한 예입니다.스칼라 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