treeview - JavaFx 2.0 : get TreeItems or Nodes currently visible on screen

标签 treeview javafx javafx-2

我有TreeView<TitledPane>并且只想显示 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

最佳答案

请参阅此 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/

相关文章:

Delphi:根据文件名称在 TreeView 中创建文件树

wpf - 如何绑定(bind)到 TreeView 的子分支或叶子(MVVM 样式)?

java - 跟踪在 javafx 中绑定(bind)的节点的变化

javafx-2 - JavaFX 自定义 Controller 工厂

java - 如何生成构建器类

javascript - 如何删除 C# 或 JavaScript 中的空节点?

asp.net - Foreach无法对方法组进行操作

java - ShellIpcClient 和 NonCelloThread 错误 java

JavaFX 8 getChildren().clear() 之后重复子项

javafx - javafx支持MDI(多文档界面)吗?