标签提供者未调用

时间:2019-02-18 19:25:02

标签: java eclipse-plugin swt jface

下面的代码不能正确显示文本,但是不能正确显示文本,而是显示Record类的toString()。

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) {/**/}
}

“文件”列中显示的文本为“ a.b.c.Stats$Record@750e313c”,“消费”列中没有显示文本。

我已经在“ getText”方法中设置了断点:它们从未到达过。

我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

在致电setInput之前,您必须先设置与表有关的所有内容,然后移动

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

在方法末尾一行。