Текст ячейки SWT / Jface не сохраняется в модели

#java #swt #jface

#java #swt #jface

Вопрос:

Я задал вопрос, связанный с проблемой, с которой я сталкивался раньше, но возникла новая. Изначально я хотел иметь возможность выделять строку в моей таблице одним щелчком мыши и редактировать ячейку двойным щелчком мыши. greg-449 дал мне решение проблемы (избавление от FocusCellManager и простое использование EditingSupport вместе с другими классами, которые у меня были, и установка editorActivationStrategy на бит MOUSE_DOUBLE_CLICK_SELECTION. Однако теперь, когда я ввожу текст в ячейку, текст не сохраняется в моей модели. С другой стороны, когда я использую FocusCellManager, текст действительно сохраняется.

Теперь я должен использовать CellEditors, поскольку уже существует очень длинный список CellEditors, настроенных для определенных столбцов. Я не уверен, возможно ли использовать EditingSupport вместе с CellEditors, или если это вообще необходимо. Я прилагаю несколько фрагментов.

Соответствующий раздел DatumTableViewer.java:

 FocusCellOwnerDrawHighlighter drawHighlighter = new FocusCellOwnerDrawHighlighter(this); //removed this to fix the highlighting issue

final TableViewerFocusCellManager mgr = new TableViewerFocusCellManager(this, drawHighlighter); //removed this to fix the highlighting issue. 

final ColumnViewerEditorActivationStrategy editorActivationSupport = getEditorActivationStrategy();

int tableKeyboardTraversalFeature = getKeyboardTraversalFeature();

TableViewerEditor.create(this, mgr, editorActivationSupport, tableKeyboardActivationFeature);

DatumColumnEmnum[] tableColumnsAsArray = getTableColumnsAsArray();

createTable(this.getTable(), tableColumnsAsArray);

setColumnProperties(properties.getPresentedColumnNames); //properties is passed into constructor

setCellEditors(tableColumnsAsArray); //I think this doesn't work properly without FocusCellManager

DatumCellModifier modifier = new DatumCellModifier(this, properties, myExpressionDataProvider); // myExpressionDataProvider is passed into constructor)

setCellModifier(modifier);

setContentProvider(contentProvider);

setInput(_myDatumList); // myDatumList set before this snippet

}
  

setCellEditors:

 private void setCellEditors(DatumColumnEnum[] columns)
{
    cellEditor[] editors = new CellEditor[columns.length];

    for(int i = 0; i < columns.length; i  ){
      DatumColumnEnum columnID = columns[i];
      
      switch(columnID) // cases have been trimmed to shorten this snippet
      {
        case DATUM_ID_COLUMN:
        case DATUM_NUMBER_COLUMN:
        case DATUM_NAME_COLUMN:
          editors[i] = new TextCellEditor(this.getTable());
          ((Text) editors[i].getControl()).setTextLimit(60);
          break;
      }
    }
    this.setCellEditors(editors);
}
  

Я подозреваю, что эти фрагменты содержат проблему, но если нет, то, пожалуйста, дайте мне знать, и я добавлю также другие функции.

Комментарии:

1. EditingSupport это просто альтернатива использованию setCellEditors и setCellModifier , не должно иметь большого значения, что вы используете. Вы не можете их смешивать, вы либо используете один, либо другой.

2. делает ли FocusCellManager что-нибудь, кроме размещения фокуса на ячейке? Взаимодействует ли он с редакторами ячеек?

3. Я ничего не знаю о FocusCellManagers, поскольку я никогда ими не пользовался.