Решение 1:
Одним из способов выбора строки таблицы при выборе CCombo является передача индекса строки в pSetTableRowToDo()
при создании каждой строки, а затем в comboboxAction.addSelectionListener()
do tableLoc.setSelection(rowToSelect)
, который прекрасно работает, как показано ниже.
private void psetTableRows() {
for (int rowIndex = 0; rowIndex < 7; rowIndex++) {
TableItem itemTmp = new TableItem(tableLoc, SWT.BORDER);
itemTmp.setText(0, String.valueOf(rowIndex));
pSetTableRowToDo(itemTmp, rowIndex);
}
}
private void pSetTableRowToDo(TableItem itemIn, int rowIndex) {
TableEditor editor = new TableEditor(tableLoc);
CCombo comboboxAction = new CCombo(tableLoc, SWT.BORDER | SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION);
comboboxAction.setText("=");
comboboxAction.add("=");
comboboxAction.add(">");
comboboxAction.add("<");
comboboxAction.add("?");
comboboxAction.add("x");
editor.grabHorizontal = true;
editor.setEditor(comboboxAction, itemIn, 1);
editor = new TableEditor(tableLoc);
comboboxAction.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
@Override
public void widgetSelected(SelectionEvent arg0) {
tableLoc.setSelection(rowIndex);
tableLoc.forceFocus();
System.out.println("Selected Table Row Index: " +tableLoc.getSelectionIndex());
}
});
}
Решение 2:
Другой подход заключается в том, чтобы получить индекс tableItem и установить выбор в этот индекс, который работает идеально, как показано ниже. Возможно, вы захотите использовать tableLoc.forceFocus();
, чтобы выбранная строка была сфокусирована.
private void pSetTableRowToDo(TableItem itemIn) {
TableEditor editor = new TableEditor(tableLoc);
CCombo comboboxAction = new CCombo(tableLoc, SWT.BORDER | SWT.CHECK | SWT.MULTI | SWT.FULL_SELECTION);
comboboxAction.setText("=");
comboboxAction.add("=");
comboboxAction.add(">");
comboboxAction.add("<");
comboboxAction.add("?");
comboboxAction.add("x");
editor.grabHorizontal = true;
editor.setEditor(comboboxAction, itemIn, 1);
editor = new TableEditor(tableLoc);
comboboxAction.addSelectionListener(new SelectionListener() {
@Override
public void widgetDefaultSelected(SelectionEvent arg0) {
}
@Override
public void widgetSelected(SelectionEvent arg0) {
int indexOf = tableLoc.indexOf(itemIn);
tableLoc.setSelection(indexOf);
tableLoc.forceFocus();
System.out.println("Selected Table Row Index: " + tableLoc.getSelectionIndex());
}
});
}