如果您只引用 Tab
或 TabPane
中的 Node
Tab
例如
TabPane tabPane = new TabPane();
Tab tab = new Tab();
tab.setText("new tab");
Rectangle drect = new Rectangle(200,200, Color.LIGHTSTEELBLUE);
tab.setContent(drect);
tabPane.getTabs().addAll(tab,new Tab("tab 2"));
假设我只引用了drect
我怎样才能得到tab
。
我对 Node.setUserData()
不感兴趣,而且 drect.getParent().getClass().getName()
返回
TabPaneSkin
匿名内部类TabContentRegion
:两个陌生人。
我想说的是 Node.getParent()
应该返回父节点 Node
,通用的单向知识 ( 节点在场景图中的表示可以使用 getParent() ) 进行跟踪,但是,当涉及到 Tab
时,它全错了,因此我的问题
编辑
为什么我需要这个,假设你有 TabPane
由很多 Tab
组成,在一个特定的 Tab
中你有一个 TreeView
作为它的 Node-Content
是根据某些条件选择的,对于那个特定的 TreeView
你有不同的自定义 Cell
因为它的 TreeItem
在 UI 和功能方面有所不同——比如更改 styles
绑定(bind) Fonts
和其他可绑定(bind)对象以及动画 Tab
隐藏TabPane
中的其他Tab
,关闭其他Tab
在这种情况下,遵循这种方法对我来说似乎是合法的,因为您不会做不必要的事情,比如让 child 暴露在恶劣的天气中。 :-)
谢谢 James_D 爵士
最佳答案
Tab
本身并不是一个Node
,因此您无法通过以任何方式遍历场景图来获取选项卡。如果您在层次结构中走得足够远,您可以到达 TabPane
。例如:
private TabPane findTabPaneForNode(Node node) {
TabPane tabPane = null ;
for (Node n = node.getParent(); n != null && tabPane == null; n = n.getParent()) {
if (n instanceof TabPane) {
tabPane = (TabPane) n;
}
}
return tabPane ;
}
将返回包含传入节点的最近的TabPane
,如果节点不在选项卡 Pane 中,则返回null
。
但是,需要这个似乎是您的设计错误。如果您将一个节点放在选项卡 Pane 中,则在某个时候您会创建一个选项卡,因此您应该只组织您的代码以便获得对可用选项卡的引用。
关于JavaFX 从 TabContent(Node) 访问 Tab 或 TabPane,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186784/