3

我已经TreeView<TitledPane>并且只想显示TitledPane.

TitledPane如果屏幕上的内容可见,我希望通知一些事件。

TitledPaneexpandedProperty(),所以崩溃了,但我看不到任何东西可以过滤掉 TreeView 上远处且未显示的 TreeItems。

我想到的另一种可能的方法是使用 来检查位于 TitledPane 中的节点的可见性visibleProperty,但这似乎不起作用。

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

4

1 回答 1

4

请参阅此 JavaFX 论坛主题“ListView Visible Items”和相关的 JavaFX 问题数据库条目“可滚动组件中的项目可见性应在 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());
于 2012-04-17T00:23:24.763 回答