我有TreeView<TitledPane>
并希望仅显示&#34;未读&#34;内容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
答案 0 :(得分:4)
请参阅此JavaFX论坛主题"ListView Visible Items"以及相关的JavaFX问题数据库条目"Item visibility in scrollable components should be in API",以获取增强请求,以便更轻松地实现您所寻求的目标。
visibleProperty
与添加到场景时是否可以看到项目有关,而不是当前是否正在显示(例如,如果布局节点的剪辑或滚动当前阻止了子节点显示后,子节点仍然可以具有trueProperty值,即使您当前无法看到它。简而言之,正如您所发现的那样,这对您没有帮助。
以上链接的论坛帖子为ListView
提供了以下解决方法,您可以适应TreeView
情况,但您需要通过某种方式知道TreeView的呈现方式场景中显示的单元格正在更改以触发您需要的“事件”。
VirtualFlow vf = ((VirtualFlow)((ListViewSkin)myList.getChildrenUnmodifiable().get(0)).getChildrenUnmodifiable().get(0));
System.out.println(vf.getFirstVisibleCell().getIndex()+", "+vf.getLastVisibleCell().getIndex());