2014-10-06 1 views
0

TreeViewer 일부 셀은 링크처럼 보이도록 스타일이 지정되어 있습니다. 트리는 내용 제공자와 StyledCellLabelProviders으로 채워져 있습니다. 그 특정 "링크"셀을 마우스 커서로 옮기고 마우스를 클릭하면 (실제로 해당 링크로 무언가를 할 때) 언제 알 수 있어야합니다.Java/SWT 마우스를 가져 가거나 트리 뷰어 열을 클릭하십시오.

나는 솔루션을 찾지 못했습니다. 그래서 어떤 도움도 높이 평가 될 것입니다.

감사합니다, 오렌

편집 : 더 설명 나는 나무와 treeviewer 있습니다. 각각에 대해 TreeViewerColumn 인 4 개의 TreeColumns이 있습니다. 데이터는 컨텐츠 제공자와 2 가지 유형의 레이블 제공자 (단순 텍스트 및 스타일이 지정된 텍스트)로 채워진다. 네 번째 열의 항목에서 마우스를 클릭 할 때와 마우스를 가리킬 때를 알아야합니다. 그런 일이 생기면 클릭 한 셀,이 셀이 속한 TreeItem,이 항목의 데이터 등을 알아야합니다.

제 문제는이 문제를 해결할 수 없다는 것입니다. 마우스 리스너 또는 선택 리스너를 사용할 때 첫 번째 열에서만 작동합니다. 나는 네 번째에 도달 할 수 없다.

열 순서를 변경할 수 없거나 의미가 없습니다.

아이디어가 있으십니까?

답변

0

나는이 방법을 따를 것입니다 :

  1. 은 나무

  2. MouseMoveListener를 첨부 마우스 포인터가 Tree.getItem(Point)로 끝났다 TreeItem 결정합니다.

    여러 열이있는 트리의 경우 getItem()은 마우스 위치가 첫 번째 열에있는 경우에만 항목을 반환합니다. 어느 항목 detmine하는 SWT.FULL_SELECTION 스타일 플래그와 함께 트리를 만들거나이 같은 해결 방법을 사용 :

    TreeItem item = tree.getItem(new Point(event.x, event.y)); 
    int x = 0; 
    while(item == null) { 
        item = tree.getItem(new Point(x, event.y)); 
        x += 5; 
    } 
    

    추가 contition 가지고 neccesary 수 있습니다 (.) 예를 들어 X < tree.getBounds를 (x)를의 while 루프는 항목이없는 경우 무한 루프를 방지합니다.

  3. 하나는 TreeItem이고, 표시되는 요소는 TreeItem.getData()입니다. 이것은 TreeViewer의 구현 세부 사항입니다. 그러나 주어진 TreeItem에 대한 요소를 얻는 또 다른 방법이 있다는 것을 모르고 있습니다.

+0

내 TreeItem에는 각각 4 개의 열이 있지만 콘텐츠 뷰어로 만들면 최상위 수준의 각 TreeItem에는 콘텐츠 공급자가 보여주는 몇 개의 하위 항목이 있어야한다고 생각합니다. 그러나 반복 할 때 그들을 보여주지 마십시오. 그래서 내가 얻을 TreeItem이 맞는지 확신 할 수 없다. 나는 그것을 다시 시도하고 여기에 다시 업데이 트하십시오. –

+0

업데이트 : 지금 시도해 보았습니다. 첫 번째 열 위로 마우스를 이동했을 때만 TreeItem을 가져올 수 있습니다. 다른 열 위에 마우스를 올리면 얻을 수 없습니다. 어떤 생각? –

+0

@OrenSarid 다중 열 나무에 대해 알아 낸 내용으로 답변을 업데이트했습니다. HTH Rüdiger –