我有TreeView<TitledPane>
并且只想显示 TitledPane
的“未读”内容.
如果 TitledPane
的内容,我想通知一些事件在屏幕上可见。
TitledPane
有expandedProperty()
,如此崩溃,但我没有看到任何东西可以过滤掉 TreeView 上远离且未显示的 TreeItems。
我想到的另一种可能的方法是使用 visibleProperty
检查位于 TitledPane 中的节点的可见性。 ,但这似乎不起作用。
pane.visibleProperty().addListener(new EnhancedListener(pane));
private class EnhancedListener implements ChangeListener<Boolean>
{
Node parent;
EnhancedListener(Node parent)
{
this.parent = parent;
}
@Override
public void changed(ObservableValue<? extends Boolean> arg0,
Boolean arg1, Boolean arg2) {
TitledPane p = (TitledPane) parent;
System.out.println(((Label)p.getContent()).getText()+" " + arg2);
}
}
我使用 JavaFX 2.0.3
最佳答案
请参阅此 JavaFX 论坛主题 "ListView Visible Items"和相关的 JavaFX 问题数据库条目 "Item visibility in scrollable components should be in API"请求增强功能,以便更轻松地实现您的目标。
visibleProperty
与添加到场景时是否可以看到项目有关,而不是当前是否正在显示(例如,如果布局节点的剪辑或滚动当前阻止显示子节点,子节点仍然可以具有 visibleProperty 值 true,即使您当前看不到它)。所以简而言之,正如您发现的那样,它在这里对您没有帮助。
上面链接的论坛帖子为 ListView
提供了以下解决方法,您可以根据您的 TreeView
情况进行调整,但您需要采取一些措施知道场景中显示的 TreeView 渲染单元格正在发生变化以触发您需要的“事件”。
VirtualFlow vf = ((VirtualFlow)((ListViewSkin)myList.getChildrenUnmodifiable().get(0)).getChildrenUnmodifiable().get(0));
System.out.println(vf.getFirstVisibleCell().getIndex()+", "+vf.getLastVisibleCell().getIndex());
关于treeview - JavaFx 2.0 : get TreeItems or Nodes currently visible on screen,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10113045/