JFace TableViewer:用内容填充表格

时间:2014-05-15 07:45:47

标签: swt jface tableviewer

我正在尝试研究JFace的结构元素是如何工作的。我做了以下简单的界面:

protected Control createContents(Composite parent)
{
    Composite container = new Composite(parent, SWT.NONE);
    container.setLayout(new FillLayout(SWT.HORIZONTAL));

    TableViewer tableViewer = new TableViewer(container, SWT.BORDER | SWT.FULL_SELECTION);
    table = tableViewer.getTable();
    table.setLinesVisible(true);
    table.setHeaderVisible(true);

    tableViewer.setContentProvider(ArrayContentProvider.getInstance());
    tableViewer.setInput(new String[][]{{"1", "2", "3"},{"1", "2", "3"},{"1", "2", "3"}});

    TableViewerColumn tableViewerColumn = new TableViewerColumn(tableViewer, SWT.NONE);
    TableColumn tblclmnTest = tableViewerColumn.getColumn();
    tblclmnTest.setWidth(58);
    tblclmnTest.setText("Test1");
    tableViewerColumn.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public String getText(Object element)
        {
            return super.getText(((String[])element)[0]);
        }
    });

    TableViewerColumn tableViewerColumn2 = new TableViewerColumn(tableViewer, SWT.NONE);
    TableColumn tblclmnTest2 = tableViewerColumn2.getColumn();
    tblclmnTest2.setWidth(58);
    tblclmnTest2.setText("Test2");
    tableViewerColumn2.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public String getText(Object element)
        {
            return super.getText(((String[])element)[1]);
        }
    });

    TableViewerColumn tableViewerColumn3 = new TableViewerColumn(tableViewer, SWT.NONE);
    TableColumn tblclmnTest3 = tableViewerColumn3.getColumn();
    tblclmnTest3.setWidth(58);
    tblclmnTest3.setText("Test3");
    tableViewerColumn3.setLabelProvider(new ColumnLabelProvider()
    {
        @Override
        public String getText(Object element)
        {
            return super.getText(((String[])element)[2]);
        }
    });

    return container;
}

我做了类似于tutorial的所有事情,但问题是:getText()方法没有被调用。我通过在其中插入System.out.prinln来解决这个问题。结果看起来不像它应该看起来:

screenshot

我的错误是什么?

1 个答案:

答案 0 :(得分:3)

在设置表列之前,您正在调用tableViewer.setInput - 在定义所有列之后,您必须执行setInput