1

我在我的项目中使用 StyledText,其中我有很多文本可以根据某些事件具有不同的样式,有时这些样式可能会重叠,因此可以为已经设置的区域设置表示黄色背景颜色的样式具有红色前景色的 styleRange。

这是一个不代表闭源项目的代码示例:

        text_1 = new StyledText(composite, SWT.BORDER);
        text_1.setBounds(10, 10, 320, 21);
        text_1.setText("1234567890abcdefghij");
        text_1.setStyleRange(new StyleRange(0, 9, Display.getDefault().getSystemColor(SWT.COLOR_RED), null));
        text_1.setStyleRange(new StyleRange(2, 9, null,  Display.getDefault().getSystemColor(SWT.COLOR_YELLOW)));
        text_1.setSelection(3, 7);

0-9的第一个样式是红色的前景色,2-9的第二个是黄色的背景,我得到的是只有0-1会有红色的前景色,而2-9会有带有黄色背景的黑色前景色,当我想要的是 2-9 同时具有红色前景和黄色背景时。

结果:

它看起来如何

我希望它看起来像什么:

应该如何

我的问题,我怎样才能使设置新的 styleRange 不会删除旧的样式范围或至少复制以前的特征,以防万一为空?

谢谢你。

4

2 回答 2

4

JavaDocsetStyleRange()几乎说明了一切:

新样式会覆盖指定范围的现有样式。如果现有样式范围与新样式部分重叠,则会调整它们

这意味着您必须单独定义每个部分:

  • 红色文字,白色背景
  • 红色文字,黄色背景
于 2017-04-17T13:58:47.820 回答
4

样式范围不能重叠。您将不得不编写代码来组合它们重叠的范围以实现您想要的。

如果您可以使用 JFace,则TextPresentation该类可以合并重叠范围。您可以单独使用它,也可以与TextViewerorSourceViewer类结合使用。

于 2017-04-17T13:59:02.060 回答