2012-04-11 18 views
3

我有TreeView<TitledPane>並且只想顯示TitledPane的「未讀」內容。JavaFx 2.0:獲取目前在屏幕上可見的TreeItems或節點

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

TitledPaneexpandedProperty(),所以崩潰了,但我沒有看到任何東西來過濾TreeItems遠離TreeView和不顯示。

我想過的另一種可能的方法是使用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

回答

4

看到這個JavaFX的論壇主題"ListView Visible Items"和增強申請相關的JavaFX問題數據庫條目"Item visibility in scrollable components should be in API",使這個更容易實現你追求什麼。

visibleProperty與添加到場景時是否可以看到項目有關,而不是當前是否顯示項目(例如,如果佈局節點的剪輯或滾動當前阻止子節點從即使您目前無法看到,子節點仍然可以具有true的visibleProperty值)。所以簡而言之,就像你發現的那樣,它不會幫你在這裏。

上面鏈接的論壇主題爲ListView以下解決方法,你也許能夠適應你的TreeView情況,雖然你將需要制定出一些方法來知道在現場顯示的TreeView的渲染單元正在改變觸發您需要的「事件」。

VirtualFlow vf = ((VirtualFlow)((ListViewSkin)myList.getChildrenUnmodifiable().get(0)).getChildrenUnmodifiable().get(0)); 
System.out.println(vf.getFirstVisibleCell().getIndex()+", "+vf.getLastVisibleCell().getIndex()); 
相關問題