如何通过Swing使用空方块在SWT StyledText小部件中显示不可打印的字符?
要通过源字符串中的正则表达式替换所有出现的符号,不能成为解决方案,因为复制&使用原始代码点粘贴将不再可能。
最好的方法可能是拦截文本渲染并在那里替换它们,但这似乎打开了潘多拉盒子......
修改1:
控制字符,它的全部内容,是通常只是跳过的字符,而不是由编辑器显示的字符,如HOP(U + 0081)
答案 0 :(得分:0)
对于E4 RCP应用程序,我已经附加了一些代码。
基本上是使用IEventBroker通过按钮添加/删除TextViewer的画家。
StyledText可以从
获得styledText = tv.getTextWidget();
如上所述
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);
}
}
}
}
处理程序类
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);
}
}
包含界面:
public interface EventConstants {
String WHITE_CHARACTERS_STATUS = "WHITE-CHARACTERS-STATUS";
}