3

TreeView<TitledPane>の「未読」コンテンツのみを表示したいのですがTitledPane

TitledPaneのコンテンツが画面に表示された場合に通知されるイベントが欲しいのですが。

TitledPaneexpandedProperty()折りたたまれていますが、TreeViewで遠くにあり、表示されていないTreeItemを除外するものは何も表示されません。

私が考えたもう1つの潜在的な方法は、を使用して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);
    } 
}

JavaFX2.0.3を使用しています

4

1 に答える 1

4

この JavaFX フォーラム スレッド「ListView Visible Items」および関連する JavaFX イシュー データベース エントリ「Item Visibility in scrollable components should be in API」を参照して、目的を達成しやすくするための機能強化のリクエストを確認してください。

これvisiblePropertyは、アイテムが現在表示されているかどうかではなく、シーンに追加されたときにアイテムが表示されるかどうかに関係します (たとえば、レイアウト ノードのクリップまたはスクロールによって現在子ノードが表示されない場合、子ノードnode は、現在表示されていなくても、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 に答える