2015-05-14 4 views
0

Я заметил, что JFace TableViewer имеет некоторые проблемы с отображением текста в первом столбце (только), если другие ячейки в других столбцах содержат значки. Появится дополнительное пространство перед текстом. Я не думаю, что эта проблема еще не найдена, поэтому, возможно, потребуется дополнительная настройка. Вот пример:JFace TableViewer недопустимое расположение текста в первом столбце, если некоторые ячейки содержат значок

What is this blank space for?

И простой код для проверки:

public class IconTest { 
private static class MyContentProvider implements IStructuredContentProvider { 
    public Object[] getElements(Object inputElement) { 
     return new String[] { "one", "two", "three", "four", "five", "six", "seven", "eight", 
       "nine", "ten" }; 
    } 

    public void dispose() { 

    } 

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { 

    } 
} 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    final Display display = new Display(); 
    Shell shell = new Shell(display); 
    shell.setLayout(new FillLayout()); 

    TableViewer v = new TableViewer(shell, SWT.FULL_SELECTION); 
    v.getTable().setLinesVisible(true); 
    v.getTable().setHeaderVisible(true); 
    v.setContentProvider(new MyContentProvider()); 

    CellLabelProvider labelProvider = new CellLabelProvider() { 

     public void update(ViewerCell cell) { 
      cell.setText(cell.getElement().toString()); 
     } 
    }; 

    CellLabelProvider labelProvider2 = new CellLabelProvider() { 
     public void update(ViewerCell cell) { 
      cell.setText(cell.getElement().toString()); 
      cell.setImage(Display.getDefault().getSystemImage(SWT.ICON_QUESTION)); 
     } 
    }; 

    TableViewerColumn column = new TableViewerColumn(v, SWT.NONE); 
    column.setLabelProvider(labelProvider); 
    column.getColumn().setText("Column 1"); 
    column.getColumn().setWidth(100); 

    TableViewerColumn column2 = new TableViewerColumn(v, SWT.NONE); 
    column2.setLabelProvider(labelProvider2); 
    column2.getColumn().setText("Column 2"); 
    column2.getColumn().setWidth(100); 

    v.setInput(""); 

    shell.setSize(400, 400); 
    shell.open(); 

    while (!shell.isDisposed()) { 
     if (!display.readAndDispatch()) { 
      display.sleep(); 
     } 
    } 

    display.dispose(); 
} 
} 

Любые идеи?

ответ

1

Это давняя известная проблема - см сообщение об ошибке Eclipse, 43910 (с 2004 года!)

В докладе ошибка говорит о том, что лежащий в основе таблицы кодов Windows, ведет себя, как это и нет ничего SWT/JFace может делать Это.

Возможно, вы сможете обойти это, используя OwnerDrawLabelProvider, который обеспечивает полный контроль над тем, как нарисована ячейка. StyledCellLabelProvider получен для OwnerDrawLabelProvider и прост в использовании.

Смежные вопросы