未调用标签提供程序

Label provider not called

下面的代码没有正确显示文本和长度,但是记录的 toString() class。

public class CodeCheckerPreferencePage extends PreferencePage
   implements
      IWorkbenchPreferencePage
{
   public CodeCheckerPreferencePage() {
      super( "Code checker statistics" );
   }

   @Override
   protected Control createContents( Composite parent ) {
      final TableViewer viewer =
         new TableViewer(
            parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL |
                    SWT.FULL_SELECTION | SWT.BORDER );
      viewer.setContentProvider( ArrayContentProvider.getInstance());
      viewer.setInput( Stats.getStats().getRecords());
      final Table table = viewer.getTable();
      table.setHeaderVisible( true );
      table.setLinesVisible( true );
      final TableViewerColumn colFile =
         new TableViewerColumn( viewer, SWT.NONE );
      colFile.getColumn().setWidth( 400 );
      colFile.getColumn().setText( "File" );
      colFile.setLabelProvider( new ColumnLabelProvider() {
         @Override public String getText( Object element ) {
            return ((Stats.Record)element).getFile(); }});
      final TableViewerColumn colConsumed =
         new TableViewerColumn( viewer, SWT.NONE );
      colConsumed.getColumn().setWidth( 80 );
      colConsumed.getColumn().setText( "Consumed ms" );
      colConsumed.setLabelProvider( new ColumnLabelProvider() {
         @Override public String getText( Object element ) {
            return String.format( "%3d",
                      ((Stats.Record)element).getConsumed()); }});
      final GridData gridData = new GridData();
      gridData.verticalAlignment = GridData.FILL;
      gridData.horizontalSpan = 2;
      gridData.grabExcessHorizontalSpace = true;
      gridData.grabExcessVerticalSpace = true;
      gridData.horizontalAlignment = GridData.FILL;
      viewer.getControl().setLayoutData(gridData);
      return table;
   }

   @Override
   public void init(IWorkbench workbench) {/**/}
}

"File"栏中显示的文字是"a.b.c.Stats$Record@750e313c","Consumed"栏中没有显示文字。

我在方法中设置了断点"getText":它们永远不会到达。

我的错误在哪里?

您必须在 调用 setInput 之前设置有关 table 的所有内容,因此移动

  viewer.setInput( Stats.getStats().getRecords());

行到方法的末尾。