JFace LabelProvider:我如何知道LabelProvider中列的标题/名称?

时间:2014-02-06 15:46:38

标签: java eclipse-rcp jface eclipse-plugin

这是使用LabelProvider定义在列中写入内容的常用方法

@Override
public String getColumnText(final Object element, final int iColumn) {
            switch (iColumn) {
            case 0:
..
            case 1:
..
            default:
...
            }
}// getColumText()

这意味着我被赋予了列的id。 如何在LabelProvider中给出id的列的“标题”?

之类的东西
String str = xxx.getColumnName( iColumn );

我找不到。

3 个答案:

答案 0 :(得分:2)

这是使用ColumnLabelProvider的示例。这使用TableColumnLayout上设置的CompositeTableViewer只包含final Composite tableComp = new Composite(parent, SWT.NONE); tableComp.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); final TableColumnLayout layout = new TableColumnLayout(); tableComp.setLayout(layout); TableViewer viewer = new TableViewer(tableComp, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); Table table = viewer.getTable(); col = new TableViewerColumn(_viewer, SWT.LEAD); col.setLabelProvider(new NameColumnLabelProvider()); col.getColumn().setText(Messages.title_filename); layout.setColumnData(col.getColumn(), new ColumnWeightData(70)); col = new TableViewerColumn(_viewer, SWT.TRAIL); col.setLabelProvider(new DurationColumnLabelProvider()); col.getColumn().setText(Messages.title_duration); layout.setColumnData(col.getColumn(), new ColumnWeightData(30)); private static class NameColumnLabelProvider extends ColumnLabelProvider { @Override public String getText(final Object element) { // return name column label } } private static class DurationColumnLabelProvider extends ColumnLabelProvider { @Override public String getText(final Object element) { // return duration column label } } ,如果调整控件的大小,这允许布局调整列大小。

{{1}}

答案 1 :(得分:0)

好吧,好笑我从来没有读过你的答案greg :(非常感谢:) 但是,您的建议要求您事先知道哪些列。我做了什么创建了dinamically列,这些列被添加到树视图中。

我最终做了什么: - 外部管理id / label

的地图

商品: -Simple:独立于Eclipse / JFace,易于理解,便于携带。 劣品: - 好吧,每当我添加一个列时,我必须在地图中添加它,同样删除。但是一旦完成,很明显(我将来添加列的其他方法(原则上不需要,因为我没有通用),必须考虑在地图中注册它们。

- 将它封装在JFace中会很好。

答案 2 :(得分:0)

第1步: 使用私有属性制作你自己的labelprovider" TableViewer引用了TableViewer"。 使用此属性构建构造函数。

现在你可以在getColumnText-method中引用tableviewer:

    @Override
public String getColumnText(Object element, int columnIndex) {

    String columnTitle = referencedTableViewer.getTable()
                                              .getColumn(columnIndex).getText();
...

第2步: 构建TableViewer,参考TableViewer

实例化labelprovider