2016-07-07 38 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没有石膏。