2016-07-07 33 views
0

我的項目包含一個用動態生成的Tab對象填充的TabPane(detailsPane)。我有一個自定義類(DetailTab),它擴展了Tab以提供這些選項卡。訪問自定義選項卡類方法

在我的DetailTab類中,我包含了幾個需要從控制器訪問的方法。

但是,我很努力地訪問各個標籤本身以調用這些方法。

到目前爲止,我已經在我的控制器試過這樣:

private void buildComment() { 
    StringBuilder comment = new StringBuilder(); 

    // Append comments from each tab 
    for (Tab t : detailsPane.getTabs()) { 
     t.getComment(comment); 
    } 
} 

然而,getComment方法不是從控制器訪問,我得到正常的「無法解析法」的錯誤。

的DetailTab類有方法:

public StringBuilder getComment(StringBuilder sb) { 
    comment = sb; 
    comment.append("Testing getComment()"); 
    return comment; 
} 

有人能不能告訴我,我缺少的是什麼?跑在我的控制下獲得的選項卡的標題非常有效:

t.getText(); 

這樣看來,我訪問的正確DetailTab對象;我似乎無法得到其中的方法。

編輯: 我也嘗試了修改後用於循環申報噸作爲DetailTab:

for (DetailTab t : detailsPane.getTabs() 

的編譯拋出不兼容的類型的錯誤爲:

Error:(205, 47) java: incompatible types: javafx.scene.control.Tab cannot be converted to DetailTab 

回答

2

TabPane.getTabs返回ObservableList<Tab>Tab中沒有getComment方法;只有子類DetailTab包含該方法。因此,你需要轉換TabList

for (Tab t : detailsPane.getTabs()) { 
    ((DetailTab)t).getComment(comment); 
} 

for (DetailTab t : (List<DetailTab>) (List) detailsPane.getTabs()) { 
    t.getComment(comment); 
} 

兩個版本都將導致ClassCastException的情況下的Tab■一個不是(子)類的DetailTab


注意,循環變量的超過Iterable<T>List<T> extends Iterable<T>)類型只能是從類型分配T沒有石膏。