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

对单元格文本上的SWT表进行排序

郏瀚
2023-03-14

我有一个SWTTable,我将其与JFaceTableViewer一起使用。

我希望使用比较器对表格进行排序,该比较器与表格单元格中的文本一起工作,而不是与查看器中的模型元素一起工作。

这有什么好办法吗?

我尝试这样做是因为在单元格文本上对表格进行排序几乎在所有情况下都有效,并且它使我不必为我希望能够排序的每个模型对象属性创建单独的比较器。

问题是表通常使用查看器上设置的ViewerCompator进行排序。其比较方法无法访问其参数元素在表中的位置:

new ViewerComparator() {
    @Override
    public int compare(Viewer viewer, Object elem1, Object elem2) {
        // There seems to be no good way to get the 
        // text of the table cells here
    }
} 
  • 使用结构化查看器#findItem视图比较器#比较中查找单元格小部件。这可能有效,但我必须对所有查看器进行子类化才能公开该方法。
  • 使用视图比较器#比较中的标签提供程序将比较的元素转换为字符串。这不起作用,因为我使用的大多数标签提供程序都是CellLabelProvider,我找不到在它们上调用update以获取表文本的方法。

共有1个答案

钱经业
2023-03-14

您可以让单元格标签提供程序实现ILabelProvider,这样它就有了一个getText方法。

您可以查看的getTextFromLabelProvider方法org.eclipse.e4.ui.dialogs.filteredtree.PatternFilter,它有类似的问题:

private String getTextFromLabelProvider(IBaseLabelProvider baseLabelProvider, Object element) {
    if (baseLabelProvider == null) {
        return null;
    }
    String labelText = null;
    if (baseLabelProvider instanceof ILabelProvider) {
        labelText = ((ILabelProvider) baseLabelProvider).getText(element);
    } else if (baseLabelProvider instanceof IStyledLabelProvider) {
        labelText = ((IStyledLabelProvider) baseLabelProvider).getStyledText(element).getString();
    } else if (baseLabelProvider instanceof DelegatingStyledCellLabelProvider) {
        IStyledLabelProvider styledStringProvider = ((DelegatingStyledCellLabelProvider) baseLabelProvider)
                .getStyledStringProvider();
        StyledString styledText = styledStringProvider.getStyledText(element);
        if (styledText != null) {
            labelText = styledText.getString();
        }
    }

    return labelText;
}
 类似资料:
  • 问题内容: 在swt中,表排序适用于Strings,如何对Integer,Double和Date值进行排序。这仅适用于字符串升序。任何人都可以提出一种更好的方法来做到这一点。 问题答案: 我修改了SWT代码段,以显示如何对具有不同数据类型的列进行排序。 总结一下, 这完全取决于程序员如何对表中的列进行排序,因为表无论它们的含义是什么,总是只需要一行String数组。

  • 我有一个Table,我使用我自己的自定义LabelProvider来显示背景和前景颜色。 由此我得出,我无法更改选择的背景色。因此,我想能够改变前景色的文字选择后。但是,我不知道如何检测是否选择了特定的行,以便提供不同的前景色。 任何帮助将不胜感激,我不太精通swt。 编辑:对于任何搜索这是我所做的

  • 问题内容: 我开发了Eclipse RCP应用程序,并且遇到了问题。我们数据库中有一些布尔格式的数据,用户希望使用来查看该字段。 我试图使用来实现它作为 表编辑器 ,但它的工作速度太慢:( 我尝试使用2张图片-选中和未选中的复选框,都可以,但是我无法将它们居中对齐,它们会自动向左对齐。 我什至找到了如何捕获和事件以及如何通过更改字段手动处理它们,但是我遇到了一个问题- 我现在无法测量或绘制哪个列,

  • 本文向大家介绍javascript实现对表格元素进行排序操作,包括了javascript实现对表格元素进行排序操作的使用技巧和注意事项,需要的朋友参考一下 我们在上网中都能看到很多能够排序的,如大小、时间、价格等 现在我们也试一下排序功能: 排序的函数代码:里面含有点击之后排序--还原,和排升序和降序。 设置表格的背景颜色代码,导入的css: css代码: 效果图-----排序之前: 升序: 降序

  • 问题内容: 我有一个可排序的设置,以使用的自定义扩展名。但是,该表的某些行为是我所期望的,并且我希望就如何弄清楚该表提供一些建议。 我已经将JTable设置为可以使用以下命令进行排序: 这使我可以按预期通过单击列标题对表进行排序。 但是,我发现当我通过单击列标题对表进行排序时,行的格式(背景和前景色)也没有进行排序。 我已经将这些行设置为根据它们包含的值进行颜色编码。当我按列标题排序时,给定行NU

  • 问题内容: 我正在寻找一种表排序解决方案(使用JavaScript),但似乎还找不到合适的解决方案。我只需要按字母顺序对每一列进行排序。它不需要忽略任何代码或任何数字或使用货币。只需单击列标题即可将其从排序的z / za中切换出来。 有人知道这样一个非常简单的解决方案吗? 问题答案: 纯Javascript(ES6) 进行字母和数字排序-升序和降序 可在 Chrome , Firefox , Sa