当前位置: 首页 > 知识库问答 >
问题:

高亮显示时更改SWT树节点文本前景

王声
2023-03-14

我是SWT/JFace技术的新手,我发现了一个让我发疯的问题。在Eclipse RCP应用程序中,我有一个视图,其中放置了一个带有JFace TreeViewer的SWT树,该树通过标签提供程序提供标签和图标。根据客户要求,树的背景颜色为深蓝色,字体颜色为白色。当节点被选中时,这种颜色的组合导致节点文本的可视化效果不佳,文本不适合树区域,我们将鼠标指针放在节点上。不知何故出现了“本地高亮显示”。这可以在下图中显示。

另一方面,当我们放置鼠标的节点没有被选中时,这个问题不会发生。高亮显示会改变字体的颜色,使其更加可见。这可以在下图中显示。

在做了一些研究之后,我发现通过为swt.eraseItem事件添加一个侦听器,我可以修改所选节点的背景颜色,然后禁用选择。这允许我定义自己的选择背景样式,并禁用event.detailswt.select标志,以便在节点未被选中时强制操作系统高亮显示。

private final class EraseItemListener implements Listener {

    public void handleEvent(Event event) {
        // Only perform the node highlight when it is selected.
        if ((event.detail & SWT.SELECTED) == SWT.SELECTED) {
            // Modify background, emulate Windows highlighting.

            ...

            // Set Windows that we do not want to draw this item as a selection (we have already highlighted the item in our way).
            event.detail &= ~SWT.SELECTED;
        }
    }
}

如果使用swt.eraseItem方法,是否有任何方法可以在正确的位置显示图标?这种行为是已知的错误吗?

提前谢了。

共有1个答案

孟永望
2023-03-14

如果使用基于styledcelllabelprovider的标签提供程序(可能是基于delegatingstyledcelllabelprovider)的标签提供程序,则可以指定colors_on_selection以保留所选内容的正常颜色。

如果这还不够好(这里没有Windows要测试),您可以重写paint方法--同样,您可以尝试使用event.detail&=~swt.selected来禁止正常的选择处理,甚至自己处理绘图。

 类似资料:
  • 在页面上有两个框 这两个框是一个数组的数据类似与 [ 这种格式的我去循环然后画的框 想要实现无论点击这两行哪行 这两行都高亮显示 用过根据id查找页面元素,但id只能返回第一个所以只能第一个高亮

  • 我想突出显示JavaFX中显示的部分文本。到目前为止,我正在使用对象中的对象。为了突出显示文本中的特定部分,我使用标记将文本切割成部分(objects),以突出显示或不突出显示以下代码。 不幸的是,背景高亮显示不起作用,我有奇怪的换行符,如图所示。文本不包含任何换行符。 (对图片质量表示抱歉,这是一个真实的截图:)) 感谢任何帮助。 解决方案正如@eckig所建议的,在HBox中使用多个标签是一个

  • 我正在使用mouseup事件来触发一个函数,该函数突出显示文本,并用跨度包围突出显示的文本(堆栈溢出函数): 我遇到的主要问题是,只要包含,文本只会在高亮显示尝试中高亮显示约20%(否则高亮显示会立即消失)。我尝试添加一个setTimeout,在1s内不调用surroundContent。我还尝试删除remove()语句,但仍然没有效果。 你知道为什么会这样吗?

  • 自动取款机改变所选文本的高亮颜色似乎是不可能的。我用的是“黑暗”,但无论哪个主题,问题都是一样的。

  • 问题内容: 选择字段作为ForeignKey时,如何更改select中的显示文本?我不仅需要显示FK的名称,还需要显示其父级的名称。 有人可以提供线索吗? 问题答案: 好吧,如果你希望它仅在admin中生效而不在全局中生效,则可以创建一个自定义子类,在自定义中使用该子类,然后将相关的admin类设置为使用自定义表单。以使用的模型具有FK的示例为例:

  • 对于我使用的语法高亮Highlight.js自定义主题. 自动语言检测已关闭,因此您可能希望指定您使用的编程语言 ```rust fn main() { // Some code } ``` 与主题的其余部分一样,用于语法突出显示的css,可以使用您自己的文件覆盖. highlight.js 通常你不应该覆盖这个文件,除非你想使用更新的版本. highlight.css highlight