Редактор ячеек TableViewer не работает - SWT - PullRequest
1 голос
/ 16 июня 2011

Я пытаюсь реализовать редактируемый просмотрщик таблиц в Eclipse SWT.Я думаю, что я все сделал хорошо до сих пор, проблема в том, что таблица не редактируется - ничего не произойдет, если я нажму на любую строку.

Я зарегистрировал некоторые CellEditors во всех моих столбцах:

CellEditor[] editors = new CellEditor[columnNames.length]; 
editors[0] = new TextCellEditor(table);
//do the above for all columns
tableViewer.setCellEditors(editors);

и затем я определяю модификатор ячейки для своей таблицы:

tableViewer.setCellModifier(new CellModifier(this));

Класс CellModifier выглядит следующим образомthis:

public class CellModifier implements ICellModifier{

private DBStructureView dbView;

public CellModifier(DBStructureView view){
    super();
    this.dbView = view;
}

@Override
public boolean canModify(Object element, String property) {
    return true;
}

@Override
public Object getValue(Object element, String property) {
    int columnIndex = dbView.getColumnNames().indexOf(property);

    Object result = null;
    AttributeNode node = (AttributeNode) element;

    switch(columnIndex){
    case 0://row id
            result = node.getRow();
    case 1://name
            result = node.getName();
    case 2://value
            result = node.getValue();
    default:
            result = "unknown";
    }

    System.out.println(result);
    return result;
}

@Override
public void modify(Object element, String property, Object value) {
    int columnIndex = dbView.getColumnNames().indexOf(property);

    TableItem item = (TableItem) element;
    AttributeNode node = (AttributeNode)item.getData();
    String valueString;

    switch(columnIndex){
    case 0:
        valueString = ((String) value).trim();
        node.setRow(valueString);
        break;
    case 1: 
        valueString = ((String) value).trim();
        node.setName(valueString);
        break;
    case 2:
        valueString = ((String) value).trim();
        node.setValue(valueString);
        break;
    default:
        break;
    }   

}
}

Сделав все это, что может пойти не так?

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 июня 2011

Я нашел ошибку, кажется, я забыл установить свойства для столбцов.Я добавил:

tableViewer.setColumnProperties(columnNames);

и теперь все работает нормально, я могу редактировать любые свои ячейки!

0 голосов
/ 16 июня 2011

Оператор switch в вашем getValue () пропускает break; в каждом случае, он всегда устанавливает результат в "unknown".

Затем, если я сравню ваш код с примером в JFace Snippets , кажется, вам не хватает

tableViewer.update(.);

в modify ().

Но обе проблемы не объясняют, почему «ничего не происходит», когдаВы нажимаете на ячейку.Поскольку у нас нет бегущего фрагмента от вас, мы можем только строить догадки.Вы отлаживали?Когда вы устанавливаете точки останова в getValue () и modify () и щелкаете по ячейке, ударились ли вы по точкам останова?

Обновление: Поскольку вы пишете, что ваш код не попадетвообще проблема, скорее всего, в коде, который вы нам не показывали.

Пожалуйста, прочитайте Javadoc ColumnViewer.setCellEditor () :

Пользователи, настраивающие редактируемый TreeViewer или TableViewer с более чем одним столбцом, должны передать бит стиля SWT.FULL_SELECTION

Проверьте, имеет ли ваша таблица этот бит стиля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...