2014-10-03 2 views
2

먼저 트리를로드하는 것과 같은 요구 사항이 있습니다. 트리는 4 가지 레벨을 포함합니다.SWT 트리 노드의 특정 문자열 강조 표시

사용자가 "filterText"를 입력 할 수있는 텍스트 필드가 있으며 검색 버튼을 누를 수 있습니다.

트리에서 필터 텍스트와 일치하는 항목이 4 개이면 특정 문자열 만 노란색으로 강조 표시하고 전체 노드는 강조하지 말고 해당 트리를 확장해야합니다.

일치하지 않는 트리 노드가 확장되어서는 안됩니다.

답변

4

TreeViewer을 사용하고 있다고 가정합니다.

StyledCellLabelProvider을 사용하면 레이블 문자열 부분에 다른 스타일을 설정할 수 있습니다. DelegatingStyledCellLabelProvider 클래스는이 클래스에서 파생되므로 좀 더 쉽게 사용할 수 있습니다. 사용 레이블 제공자를 설정합니다 myLabelProviderDelegatingStyledCellLabelProvider.IStyledLabelProvider를 구현하는 클래스가

viewer.setLabelProvider(new DelegatingStyledCellLabelProvider(myLabelProvider)); 

.

public StyledString getStyledText(Object element) 

당신이 텍스트에 다른 스타일을 적용 할 수있는 StyledString를 사용하여 공급자 평소 플러스로 getImage 방법이있다. 같은 뭔가 :

StyledString text = new StyledString(); 

text.append("unstyled text"); 

text.append("styled text with decorations style", StyledString.DECORATIONS_STYLER); 

뿐만 아니라 미리 정의 된 StyledString.Styler 값을 사용자가 직접 정의 할 수 있습니다. DefaultStyler 클래스를 사용하면 JFace 색상 레지스트리에 정의 된 색상을 사용할 수 있습니다.

것 노란색의 배경을 설정하는 스타일러의 간단한 버전 :

class HighlightStyler extends Styler 
{ 
    @Override 
    public void applyStyles(final TextStyle textStyle) 
    { 
    textStyle.background = Display.getDefault().getSystemColor(SWT.COLOR_YELLOW); 
    } 
} 
+0

안녕 그렉은, 자사의 그래픽 Conext (GC) 우리가 그것을 acheive 수의 도움으로 내 문제 ... 를 해결하지? –

+0

이것으로 확실히 가능하지만 자신의 Styler를 만들어 코드를 보여줘야합니다. GC를 사용하려면'OwnerDrawLabelProvider'를 사용해야합니다. –

+0

실수로 StyledText를 사용하는 것으로 나타났습니다 - StyledString이어야합니다. –