Java 在列中显示不带文本的图像

Java 在列中显示不带文本的图像,java,eclipse,jface,Java,Eclipse,Jface,我使用的是org.eclipse.jface.viewers.ColumnLabelProvider。我有一个表,其中的列只有图标,没有文本。因此,getText方法是: @Override public String getText(final Object element) { return ""; } 当用户按下该列时,它使用以下compare方法对其进行排序: @Override public int compare(final Viewer viewer, final Obj

我使用的是
org.eclipse.jface.viewers.ColumnLabelProvider
。我有一个表,其中的列只有图标,没有文本。因此,
getText
方法是:

@Override
public String getText(final Object element) {
    return "";
}
当用户按下该列时,它使用以下
compare
方法对其进行排序:

@Override
public int compare(final Viewer viewer, final Object e1, final Object e2) {
    if (null != columnLabelProvider) {
        String s1 = columnLabelProvider.getText(e1);
        String s2 = columnLabelProvider.getText(e2);

        s1 = null == s1 ? "" : s1;
        s2 = null == s2 ? "" : s2;

        return direction * s1.compareTo(s2);
    } else {
        return 0;
    }
}
我创建它的方式:

for (final String name: names) {
    final TreeViewerColumn column = createColumn(name, true);
    final StepStatusColumnLabelProvider provider = new StepStatusColumnLabelProvider(name);
    column.setLabelProvider(provider);
    column.getColumn().addSelectionListener(new ColumnSelectionListener(column.getColumn(), provider));
}
我想对图标列进行排序,因此我将
getText
方法更改为:

@Override
public String getText(final Object element) {
    if (element instanceof StatusNode) {
        final StatusNode node = (StatusNode) element;
        return node.getStepStatusType(stepName).name();
    }
    return "";
}

它可以工作,但现在字符串显示在列中。如何在不实际显示文本的情况下对列进行排序?

更改
compare
方法实际比较的内容,而不是
getText()
@niti的结果。您的意思是在
compare
方法中处理case
StepStatusColumnLabelProvider
?我不确定是否可以检查
columnLabelProvider
是否是
StepStatusColumnLabelProvider
的实例,因为层次结构正好相反。我不想更改对
getText()
的调用,因为我必须更改所有其他提供程序。您是表查看器上使用哪个标签提供程序的设置者,是吗?我的意思是创建标签提供者的一个子类,并让您的
compare
方法按您希望的方式运行<当您返回一个空字符串时,code>getText()已经在做它应该做的事情了——符合它的接口。不创建新类是否可能?这两个类基本上是相同的,唯一的区别是来自
compare
的方法调用(一个调用
getText
,另一个调用
getImageText
)。我想在
compare
方法中检查实例的类,如果它是
StepStatusColumnLabelProvider
,我应该使用casting
((StepStatusColumnLabelProvider)columnLabelProvider)调用
getImageText
。但是我不能将
StepStatusColumnLabelProvider
导入
ColumnComparator
,因为它们在不同的包中。我不知道所有这些的完全限定名,但这听起来像是创建子类或委托的原因。