#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, поскольку я никогда ими не пользовался.