2017-09-11 12 views
1

SWT StyledText 위젯에서 인쇄 할 수없는 문자를 빈 사각형으로 스윙하여 표시하는 방법은 어떨까요?SWT 텍스트 위젯에 인쇄 할 수없는 문자를 표시하는 방법

원본 코드에서 & 붙여 넣기가 더 이상 가능하지 않기 때문에 모든 문자열을 원본 문자열의 regex를 통해 기호로 바꾸는 것은 해결책이 될 수 없습니다. ,

제어 문자, 모든 관하여 :

편집 한 ...

가장 좋은 방법은 텍스트 렌더링을 차단하고 거기에 그들을 대체 할 수 있습니다,하지만 그건 판도라의 상자를 열 것으로 보인다 HOP (U + 0081)

+1

연장 방법 [WhitespaceCharacterPainter] (https://git.eclipse.org/c/platform/eclipse.platform.text.git/tree/org.eclipse.jface.text/src/org/eclipse/jface/text) /WhitespaceCharacterPainter.java) ('TextViewer'를 통해'StyledText' 위젯을 사용 하시겠습니까?) – howlger

+0

멋진 아이디어! 나는 그것에게 시도를 줄 것이다 ... – NormanC

답변

0

E4 RCP 응용 프로그램의 경우 시작하려면 몇 가지 코드를 첨부해야합니다.

기본적으로 IEventBroker를 사용하여 버튼을 사용하여 TextViewer의 페인터를 추가/제거합니다.

public class WhitespaceCharactersHandler { 
    boolean status; 
    @Execute 
    public void execute(final MToolItem item, IEventBroker broker) { 
     if (item.isSelected()){ 
      status = true; 
     } 
     else{ 
      status = false; 
     } 
     broker.post(EventConstants.WHITE_CHARACTERS_STATUS, status); 
    } 
} 

Contants 인터페이스 클래스

import org.eclipse.jface.text.WhitespaceCharacterPainter; 
public class TheEditor{ 
    @Inject MPart thePart; 
    private WhitespaceCharacterPainter whitespaceCharacterPainter; 

    @PostConstruct 
    public void postConstruct(Composite parent) { 
      TextViewer tv = new TextViewer(parent, SWT.MULTI | SWT.V_SCROLL |SWT.H_SCROLL); 
      whitespaceCharacterPainter = new WhitespaceCharacterPainter(tv); 
      tv.addPainter(whitespaceCharacterPainter); 
      whitespaceCharacterPainter.deactivate(true); 
    } 

    @Inject 
    @Optional 
    public void updatePartByWSButton(@UIEventTopic(EventConstants.WHITE_CHARACTERS_STATUS) boolean newButtonStatus) { 
     final MElementContainer<MUIElement>container = thePart.getParent(); 
     if (thePart.equals((MPart)container.getSelectedElement())){ 
      wsToolBarButtonStatus = newButtonStatus; 
      if(wsToolBarButtonStatus){ 
       this.whitespaceCharacterPainter.paint(IPainter.CONFIGURATION); 
      } 
      else{ 
       whitespaceCharacterPainter.deactivate(true); 
       tv.removePainter(whitespaceCharacterPainter); 
      } 
     } 
    } 
} 

처리기 위에 주석으로하는 StyledText는

styledText = tv.getTextWidget(); 

로부터 얻어 질 수

:

public interface EventConstants { 
    String WHITE_CHARACTERS_STATUS = "WHITE-CHARACTERS-STATUS"; 
} 
+0

코드 스 니펫에 감사드립니다! WhitespaceCharacterPainter를 붙이는 것은 실제로 요점이 아닙니다. HOP 문자 (U + 0081)와 같이 일반적으로보기에서 삭제되는 인쇄 할 수없는 문자를 그리는 방법입니다. WhitespaceCharacterPainter를 조사해야하는 방식으로 확장했을 수도 있습니다. – NormanC