我的项目包含一个TabPane(detailsPane),其中填充了动态生成的Tab对象。我有一个自定义类(DetailTab),它扩展了Tab以提供这些选项卡。
在我的DetailTab类中,我包含了几个需要从我的控制器访问的方法。
但是,我很难自己访问各个标签,以便调用这些方法。
到目前为止,我已经在我的控制器中试过了这个:
public StringBuilder getComment(StringBuilder sb) {
comment = sb;
comment.append("Testing getComment()");
return comment;
}
但是,无法从控制器访问getComment方法,我得到正常的“无法解决方法”错误。
DetailTab类具有以下方法:
t.getText();
有人可能会告诉我我错过了什么吗?在我的控制器中运行以下命令可以正常工作以获取选项卡的标题:
for (DetailTab t : detailsPane.getTabs()
所以我似乎正在访问正确的DetailTab对象;我似乎无法了解其中的方法。
编辑: 我还尝试了一个修改过的for循环来将t声明为DetailTab:
Error:(205, 47) java: incompatible types: javafx.scene.control.Tab cannot be converted to DetailTab
编译会抛出一个不兼容的类型错误:
import other_module
other_module.counter += 1
答案 0 :(得分:2)
TabPane.getTabs
返回ObservableList<Tab>
。 getComment
中没有Tab
方法;只有子类DetailTab
包含该方法。因此,您需要转换Tab
或List
:
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
无需转换的类型。