StyledCellLabelProvider

StyledCellLabelProvider

我有一个由JFace TableViewer包装的SWT表,但是此问题也适用于org.eclipse.swt.widgets.Table。

使用StyledCellLabelProvider时,即使使用

colA.getColumn().setAlignment(SWT.RIGHT);

这是标签提供者和设置:
TableViewerColumn colA = new TableViewerColumn(measureTable, SWT.NONE);
colA.setLabelProvider(new StyledCellLabelProvider() {
    @Override
    public void update(ViewerCell cell) {
        ModelItem item = (ModelItem) cell.getElement();
        cell.setFont(FONT_REGISTRY.get(MY_SPECIAL_FONT));
        cell.setText(item.getText());
        super.update(cell);
    }
});

任何解决方法都很好。例如,将小部件嵌套在表格中,然后以某种方式在小部件中右对齐文本。

平台:Windows 7

最佳答案

您在StyledCellLabelProvider中发现了一个错误。它不会与任何其他CellLabelProvider一起发生。
StyledCellLabelProvider使用“所有者绘图”绘制Table单元格。这意味着,单元格内容不是由OS本地绘制的。它由表“所有者”在SWT.PaintItem事件中绘制。
StyledCellLabelProvider不遵守TableColumn的对齐方式。您可以看到源here,感兴趣的是getTextLayoutForInfo(.)方法。

一种解决方法是复制该类,通过添加来修复该错误

TableColumn col = ((Table)viewer.getControl()).getColumn(cell.getColumnIndex());
layout.setAlignment(col.getAlignment());

getTextLayoutForInfo(.)方法中(我没有测试此修复程序,但是,如果该修复程序不起作用,您应该了解一下并能够使之起作用)

您还应该添加一个错误报告:Eclipse Bugzilla

08-07 02:16