2012-04-11 18 views
3

私はTreeView<TitledPane>を持っていて、TitledPaneの「未読」のコンテンツのみを表示したいとします。JavaFx 2.0:画面に現在表示されているツリーアイテムまたはノードを取得する

TitledPaneの内容が画面に表示されている場合は、通知するイベントがあります。

TitledPaneexpandedProperty()なので、折りたたまれましたが、私はTreeView上で遠く離れて表示されていないTreeItemsをフィルタリングするための何も表示されません。

私が考えた別の潜在的な方法は、visiblePropertyを使ってTitledPaneに座っているノードの可視性をチェックすることですが、それはうまくいかないようです。

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); 
    } 
} 

pane.visibleProperty().addListener(new EnhancedListener(pane));

は、私が使用したJavaFX 2.0.3

答えて

4

このJavaFXのフォーラムのスレッド"ListView Visible Items"と強化のための要求のための関連のJavaFXの問題データベースエントリ"Item visibility in scrollable components should be in API"は、あなたが求めるものを達成するためにこれを簡単に行うために参照してください。 。

visiblePropertyは、現在表示中かどうかではなく、シーンに追加したときにアイテムを表示することができるかどうかに関係します(レイアウトノードのクリップやスクロールが現在、表示されている場合、子ノードはvisible属性の値をtrueにできます(現在は表示できません)。つまり、あなたが発見したように、ここであなたを助けません。

上記のリンクフォーラムのスレッドは、あなたがシーンに表示されるツリービューのレンダリングされた細胞が変化していることを知っているいくつかの方法を考え出す必要があるだろうが、あなたのTreeView状況に適応することができるかもしれListViewための次の回避策を提供し、あなたが必要とする "イベント"をトリガーします。

VirtualFlow vf = ((VirtualFlow)((ListViewSkin)myList.getChildrenUnmodifiable().get(0)).getChildrenUnmodifiable().get(0)); 
System.out.println(vf.getFirstVisibleCell().getIndex()+", "+vf.getLastVisibleCell().getIndex()); 
関連する問題