【问题标题】:How to show non-printable characters in SWT a text widget如何在 SWT 文本小部件中显示不可打印字符
【发布时间】:2017-09-11 14:08:07
【问题描述】:

如何在 SWT StyledText 小部件中显示不可打印的字符,就像 Swing 用空方块完成的那样?

在源字符串中通过正则表达式替换所有出现的符号不能成为解决方案,因为无法再使用原始代码点进行复制和粘贴。

最好的方法可能是拦截文本渲染并在那里替换它们,但这似乎打开了潘多拉的盒子......

编辑 1:

控制字符,就是这样,通常只是跳过而不被编辑器显示的字符,如 HOP (U+0081)

【问题讨论】:

标签: java eclipse swt control-characters styledtext


【解决方案1】:

对于一个 E4 RCP 应用程序,我附上了一些代码。

基本上是使用IEventBroker通过按钮来添加/删除TextViewer的painter。

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";
}

【讨论】:

  • 感谢代码 sn-ps!附加一个 WhitespaceCharacterPainter 并不是重点。它是如何绘制通常只是放在视图中的不可打印字符,例如 HOP 字符 (U+0081) - 可能通过以必须调查的方式扩展 WhitespaceCharacterPainter...
猜你喜欢
  • 2011-10-08
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2019-05-17
相关资源
最近更新 更多