【问题标题】:JFace TableViewer: filling the table with contentsJFace TableViewer:用内容填充表格
【发布时间】:2017-06-21 23:20:46
【问题描述】:

我正在尝试弄清楚 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 来解决这个问题。结果看起来不像它应该的样子:

我的错误是什么?

【问题讨论】:

    标签: swt jface tableviewer


    【解决方案1】:

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

    【讨论】:

    • 谢谢!不小心我自己弄明白了:) 另一种方法是在设置标签提供程序后调用tableViewer.refresh()。如果我调用 setInput 而没有像我的问题中那样的任何内容提供者,我想知道使用了什么内容提供者。应该是ILabelProvider的plain implementation,但是在api哪里可以看到呢?
    • 我遍历了 TableViewer 类的几个继承级别,但找不到设置默认标签提供程序的任何内容。
    • 基于ColumnViewer 的内容适用于列标签提供程序,并且不设置单个标签提供程序。如果您使用单个标签提供程序,则构建内部列标签提供程序 - 请参阅 CellLabelProviderTableColumnViewerLabelProvider。众多不同的旧标签提供商使这一切变得非常混乱。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2011-12-28
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 2014-06-24
    相关资源
    最近更新 更多