LINUX.ORG.RU

[SWT/JFace] Проблема с TableViewer в Linux


0

0

Нужно сделать таблицу, в которой в некоторых ячейках будет выделяться часть текста. Решил использовать StyledCellLabelProvider и переопределять метод update. В WinXP все работает, а в Linux почему-то во всех ячейках для строки таблицы один и тот же текст выводится.

Вот небольшой пример кода, воспроизводящий проблему:

import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;

public class TestTableViewer {
    private static class MyLabelProvider extends StyledCellLabelProvider {
        @Override
        public void update(ViewerCell cell) {
            String element = (String) cell.getElement();
            switch (cell.getColumnIndex()) {
            case 0:
                cell.setText(element);
                break;
            case 1:
                cell.setText(Integer.toString(element.length()));
                break;
            }
        }
    }

    private static class MyContentProvider implements IStructuredContentProvider {
        @Override
        public Object[] getElements(Object input) {
            return (String[]) input;
        }

        @Override
        public void dispose() {
        }

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

    private static void createViewer(Shell shell) {
        Table table = new Table(shell, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
        TableViewer viewer = new TableViewer(table);
        table.setLinesVisible(true);
        table.setHeaderVisible(true);
        TableViewerColumn column;
        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("String");
        column.getColumn().setWidth(200);
        column.getColumn().setResizable(true);
        column = new TableViewerColumn(viewer, SWT.NONE);
        column.getColumn().setText("Length");
        column.getColumn().setWidth(200);
        column.getColumn().setResizable(true);
        viewer.setContentProvider(new MyContentProvider());
        viewer.setLabelProvider(new MyLabelProvider());
        viewer.setInput(new String[] { "some string", "some other string", "one more string" });
    }

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setLayout(new FillLayout());
        createViewer(shell);
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }
        display.dispose();
    }
}

Во втором столбце должно быть число (длина строки из ячейки в первом столбце). В WinXP так и выводится, а вот в Linux почему-то не получается. Только в момент изменения размеров окна в Linux текст отображается правильно.

В чем может быть проблема?

P.S. SWT и JFace из Eclipse SDK 3.5

★★★

Ответ на: комментарий от PayableOnDeath

Тогда уж скорей Eclipse community намекает на некошерность Linux/GTK+. Интересно, как на Mac это дело отображается.

kamre ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.