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