如何将 TreeViewer 单元格的一部分设为粗体?

2024-04-16

我目前想编写一个基于 JFace 的 Eclipse 编辑器TreeViewer。我添加了一个CellLabelProvider to the TreeViewer。如果我直接在update的方法CellLabelProvider对于粗体字体,标签显示为粗体。

但我只想将标签的一部分显示为粗体。所以我申请StyleRange到单元格。在“StyleRange”中选择的颜色工作得很好,但是设置了字体StyleRange对于大胆的人来说,似乎行不通。

这是为什么?我该如何解决?


指定为greg-449 https://stackoverflow.com/a/20173149/1329340,本质上你可以创建你的Font并将其设置为bold:

  class BoldFontStyler extends Styler {                                                                  
    @Override
    public void applyStyles(final TextStyle textStyle)
    {
        FontDescriptor boldDescriptor = FontDescriptor.createFrom(new FontData()).setStyle(SWT.BOLD);
        Font boldFont = boldDescriptor.createFont(Display.getCurrent());
        textStyle.font = boldFont;
    }
}

然后你可以将其应用到你的StyledString inside #getStyledText().

我不确定这是否可移植,我刚刚在我的 Linux 机器上进行了测试。

一个完整的示例(只需将其附加到Part):

package com.ebotlution.c4ids.comms.ui;

import javax.annotation.PostConstruct;

import org.eclipse.jface.resource.FontDescriptor;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.StyledString.Styler;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.TextStyle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.TreeColumn;

class BoldFontStyler extends Styler {
    @Override
    public void applyStyles(final TextStyle textStyle)
    {
        FontDescriptor boldDescriptor = FontDescriptor.createFrom(new FontData()).setStyle(SWT.BOLD);
        Font boldFont = boldDescriptor.createFont(Display.getCurrent());
        textStyle.font = boldFont;
    }
}

class NormalColumnLabelProvider extends ColumnLabelProvider {
    @Override
    public String getText(Object element) {
        return (element).toString().split(" ")[0];
    }
}

class BoldColumnLabelProvider extends DelegatingStyledCellLabelProvider {
    static final Styler BOLD_FONT_STYLER = new BoldFontStyler();

    public BoldColumnLabelProvider() {
        super(new IStyledLabelProvider() {
            @Override
            public Image getImage(Object element) {
                return null;
            }

            @Override
            public StyledString getStyledText(Object element) {
                return new StyledString((element).toString().split(" ")[1], BOLD_FONT_STYLER);
            }

            @Override
            public void addListener(ILabelProviderListener listener) {}

            @Override
            public void dispose() {}

            @Override
            public boolean isLabelProperty(Object element, String property) {
                return false;
            }

            @Override
            public void removeListener(ILabelProviderListener listener) {}
        });
    }
}

class MyContentProvider implements ITreeContentProvider {

    static final Object[] EMPTY_ARRAY = new Object[0];

    Object[] data;

    @Override
    public void dispose() {}

    @Override
    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        data = (Object[]) newInput;
    }

    @Override
    public Object[] getElements(Object inputElement) {
        return data;
    }

    @Override
    public Object[] getChildren(Object parentElement) {
        return EMPTY_ARRAY;
    }

    @Override
    public Object getParent(Object element) {
        return null;
    }

    @Override
    public boolean hasChildren(Object element) {
        return false;
    }
}

public class BoldColumnTreeViewerEx {

    TreeViewer treeViewer;

    @PostConstruct
    public void createControls(Composite parent) {
        treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
        treeViewer.setUseHashlookup(true);
        treeViewer.setContentProvider(new MyContentProvider());
        // Do all your stuff
        // [...]

        TreeViewerColumn normalCol = createTreeViewerColumn("Normal Column");
        normalCol.setLabelProvider(new NormalColumnLabelProvider());

        TreeViewerColumn boldCol = createTreeViewerColumn("Bold Column");
        boldCol.setLabelProvider(new BoldColumnLabelProvider());

        treeViewer.setInput(new String[] { "Hello Dude", "SWT JFace" });
        treeViewer.expandAll();
    }

    private TreeViewerColumn createTreeViewerColumn(String title) {
        TreeViewerColumn viewerColumn = new TreeViewerColumn(treeViewer, SWT.NONE);
        TreeColumn column = viewerColumn.getColumn();
        column.setText(title);
        column.setWidth(100);
        return viewerColumn;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 TreeViewer 单元格的一部分设为粗体? 的相关文章

随机推荐

  • PHP 时区 getTransitions 值得信赖吗?

    您是否曾经遇到过通过 getTransitions 函数进行 PHP 时区转换的任何问题 我正在尝试将阿根廷日期转换为 GMT 如果我查看转换数组 我会得到 63 gt Array ts gt 1287284400 time gt 2010
  • 使用“overflow: auto”滚动 div 的位置

    鉴于这个 HTML 片段 div style width 200px height 200px border 1px solid black 1 br 2 br 3 br 4 br 5 br 6 br 7 br 8 br 9 br 10 b
  • 在 xml 文件中写入一些字符,例如“<”

    自从我开始编程以来 我在为 Android 开发时在 Eclipse 中的 string xml 中使用了一些特殊字符 例如 一年来一切都运行良好 但今天 我只想做一些小的更改并开始编辑我的 xml 文件 我现在收到这些字符的编译错误 因为
  • 使用元类与多重继承相结合的类型错误

    我有两个关于数据类和多重继承的问题 第一个是 为什么我会收到该类的 TypeErrorDerived但不是为了Derived2 class Metaclass type pass class Klass object metaclass M
  • 文件下载已损坏

    我作为一名实验室讲师 试图通过将文件保留在 webroot 之上并强制他们登录 通过大学的 LDAP 进行身份验证 来确保我的学生无法过早下载他们的入门文件 验证它是否已经过版本然后 time 使用 readfile 向他们发送文件 不幸的
  • Python 中键为整数对的字典

    在Python中如何创建一个键为整数对的字典 例如 如果我这样做 mydict dict mydict 1 2 xxx 我收到错误TypeError unhashable type list 所以我想出了两种不同的解决方案 字符串或元组作为
  • Android 2.2 导致图片颜色失真?

    我的应用程序中有一些 png 文件 我需要在运行时加载这些 并从中获取某些像素的确切颜色 重要的是 我不想缩放这些图片 我不会直接在用户界面上显示它们 它们充当地图 现在 在Android 1 5上 这已经没有问题了 我将这些图像放在 re
  • 列出所有物理驱动器 (Windows)

    如何使用 C C 获取 Windows 计算机上的所有物理驱动器路径 PhysicalDriveX 答案在this https stackoverflow com questions 327718 how to list physical
  • 根据编译时常量禁用/隐藏模板中的函数

    是否可以使用编译时常量有条件地隐藏或禁用模板类中的函数 想象一下下面的类 template
  • InnoDB:无法打开或创建系统表空间

    我在 Xampp 上打开 mysql 服务器时遇到问题 错误 MySQL 意外关闭 这可能是由于端口被阻止 缺少依赖项 不正确的权限 崩溃或通过其他方法关闭 按日志按钮查看错误日志并检查 Windows 事件查看器以获取更多线索 如果您需要
  • 如何将 primevue css 文件添加到 JHipster 项目

    我正在尝试使用 vue js 应用程序将 primevue 添加到我的 jhister 中 我正在遵循这些步骤 1 运行这些评论 npm install primevue save npm install primeicons save 2
  • 假冒客户端和属性中的名称

    我有这样的东西 FeignClient name airport service name 我有编译错误 例如 java lang IllegalStateException 服务 ID 不合法主机名 airport service nam
  • GitHub Action 部署到 Azure Web App 时出错

    刚刚转换为新的 GitHub 应用程序服务操作构建和部署管道并收到以下错误 Run azure webapps deploy v2 with app name slot name publish profile package Packag
  • Visual Studio 将新文件放入错误的目录

    我使用 cmake 和 Visual Studio 并具有以下目录结构 workspace CMakeLists txt project1 src project2 src build 这背后的想法是源外构建 以便 cmake 生成的构建文
  • 从另一个线程调用 setter 时读取实例变量是否是线程安全的?

    我有一个具有属性的对象 interface Car property strong NSLicensePlate licensePlate end 我在方法中使用该属性 void doSomething licensePlate frobn
  • 使用 OCaml 警告属性禁用警告 8:不详尽的匹配

    我正在尝试编写类似于以下内容的代码 let a b body 1 2 我想仅针对该模式禁用警告 8 a b 而不是为了身体或让之外的任何东西 我尝试设置警告属性来禁用警告 但以下方法都不起作用 let warning 8 a warning
  • 重新验证用户。使用适用于 Android 的 FirebaseUI 身份验证

    我正在使用 Firebase UI 身份验证 并且想为我的应用程序实现删除帐户功能 某些安全敏感操作 例如删除帐户 设置主电子邮件地址和更改密码 要求用户最近登录 要删除用户 该用户必须最近登录过 请参阅重新验证用户身份 https fir
  • Perforce - 每次签到时都会收到电子邮件

    有没有办法让 Perforce 在每张支票上向您发送一封电子邮件到特定的存款机构 是的 输入 p4 user 查看您的用户配置 然后在 评论 下将您希望在签入时收到通知的仓库区域的文件规范放入其中 如下所示 Reviews depot my
  • 在 while 循环中使用枚举函数

    我有几种使用迭代来搜索正确答案的数学算法 这是一个例子 def Bolzano fonction a b tol 0 000001 while abs b a gt tol m a b 2 if sign fonction m sign f
  • 如何将 TreeViewer 单元格的一部分设为粗体?

    我目前想编写一个基于 JFace 的 Eclipse 编辑器TreeViewer 我添加了一个CellLabelProvider to the TreeViewer 如果我直接在update的方法CellLabelProvider对于粗体字