JavaFx 2.0:获取当前在屏幕上可见的TreeItems或节点

时间:2012-04-11 20:00:34

标签: treeview javafx javafx-2

我有TreeView<TitledPane>并希望仅显示&#34;未读&#34;内容TitledPane

如果屏幕上显示TitledPane的内容,我想要通知一些事件。

TitledPaneexpandedProperty(),因此已折叠,但我没有看到任何内容过滤掉远离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

1 个答案:

答案 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());