2014-11-21 3 views
1

간단한 작업이 필요합니다. 나는 큰 TreeView 있습니다. 다음 및 이전 메뉴 항목이 있습니다. 다음으로 다음 트리 항목을 선택해야합니다. 트리 목록 내가 내가 내가 관리해야 다음 항목을 선택, 관리 및JavaFx : TreeView에서 treeitem이 보이지 않을 때만 인덱스 번호로 스크롤해야합니다.

myTreeView.getSelectionModel().scrollTo(newIndex) 

으로 한이에 의해

myTreeView.getSelectionModel().clearAndSelect(newIndex); 

를 호출 다음 또는 이전 메뉴 항목을 누르면 이제이

-Root(set visible hide is true for root) 
--Parent 1 
----Child 1 
----Child 2 
----Child 3 
--Parent 2 
----Child 1 
----Child 2 

처럼 보이는 선택한 트리 아이템으로 스크롤하십시오.

Problam :

수동으로 첫 번째 항목을 선택하겠습니다. 그 후에 다음 버튼을 누릅니다. 이제 이것은 항상 날씨를 스크롤하는 이상한 행동을 일으킨다. 새로운 선택된 treeitem은 뷰 (뷰의 가능한 영역) 또는 뷰에서 벗어났다. 내가 트리 항목의 큰 목록을 가지고 있다고 가정합시다. 내 요구 사항은 단지 스크롤이 새로운 선택된 트리 항목이 보이지 않는 경우에만 발생하기를 원합니다. 어떤 몸든지 이것을 달성하는 방법을 제안 할 수 있는가 ??

감사합니다.

답변

3

이 간단한 것은 그리 간단하지 않습니다. JavaFX의 알려진 문제입니다. issue RT-18965을 참조하십시오.

문제의 의견을 기반으로, 나는 그것을 내 자신의 TreeView와 함께 작동하게 만들었습니다. 문제 설명에서와 같이 JavaFX의 내부 클래스를 사용하여 최종 결과를 얻었습니다. 이러한 내부 클래스가 계속 될 것이라는 보장은 없습니다. ,

import javafx.scene.control.TreeView; 
import com.sun.javafx.scene.control.skin.TreeViewSkin; 
import com.mycompany.mymodel.DataNode; 

/** 
* Only done as a workaround until https://javafx-jira.kenai.com/browse/RT-18965 
* is resolved. 
*/ 
public class FolderTreeViewSkin extends TreeViewSkin<DataNode> 
{ 
    public FolderTreeViewSkin(TreeView<DataNode> treeView) 
    { 
     super(treeView); 
    } 

    public boolean isIndexVisible(int index) 
    { 
     if (flow.getFirstVisibleCell() != null && 
      flow.getLastVisibleCell() != null && 
      flow.getFirstVisibleCell().getIndex() <= index && 
      flow.getLastVisibleCell().getIndex() >= index) 
      return true; 
     return false; 
    } 
} 

둘째 당신이 걱정 트 리뷰 인스턴스에 그 스킨을 적용 : (: 위험한 다시)

먼저, 내부 클래스에서 파생 된 새로운 피부를 만들 수 있습니다. 마지막으로

myTreeView.setSkin(new FolderTreeViewSkin(myTreeView)); 

scrollTo 전에 조건으로 새로운 방법을 사용하십시오

if (!((FolderTreeViewSkin) myTreeView.getSkin()).isIndexVisible(intThePositionToShow)) 
    myTreeView.scrollTo(intThePositionToShow); 

이 나를 위해 일 것입니다; 나는 그것이 당신이나 다른 사람을 도울 수 있기를 바랍니다.

관련 문제