org.eclipse.core.runtime.AssertionFailedException: утверждение не выполнено: - PullRequest
0 голосов
/ 11 марта 2019

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

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

/ ............ /

открытый класс Test { public static void main (String [] args) { Shell shell = новая оболочка (); shell.setText ("Пример TableViewer"); GridLayout layout = new GridLayout (); shell.setLayout (макет); Композитный композит = новый композит (оболочка, SWT.NONE); Composite.setLayoutData (новые GridData (SWT.FILL, SWT.CENTER, true, true)); Composite.setLayout (новый GridLayout (1, false)); Таблица testTable = новая таблица (составная, SWT.BORDER); testTable.setLinesVisible (истина); testTable.setHeaderVisible (истина); GridData tableData = new GridData (SWT.FILL, SWT.FILL, true, false); tableData.heightHint = 300; testTable.setLayoutData (tableData); TableViewerColumn columnViewer = null; String [] columnNames = {"Name", "Laptops"}; TableViewer testTableViewer = новый TableViewer (testTable); for (int i = 0; i

/ ............. /

class TestBean { личное строковое имя; приватный струнный ноутбук; public String [] getListOfLaptop = {"Acer", "HP", "Lenovo", "Dell", "Benq" }; // метод получения и установки }

/ .................... /

class TestEditingSuport extends EditingSupport {
private int m_column;
private CellEditor m_editor;
public TestEditingSuport(ColumnViewer viewer, int column, 
String[] listOfTestBean) {
super(viewer);
m_column = column;
// Create the correct editor based on the column index
switch (column) {
case 0:
case 1:
m_editor = new ComboBoxCellEditor(
((TableViewer) viewer).getTable(), listOfTestBean);
break;
default:
}
}
@Override
protected CellEditor getCellEditor(Object element) {
    return m_editor;
}
@Override
protected boolean canEdit(Object element) {
    return true;
}
@Override
protected Object getValue(Object element) {
    TestBean bean = (TestBean) element;
    Object value = null;
    switch (m_column) {
    case 0:
        value = bean.getName();
        break;
    case 1:
        value = bean.getLaptop();
        break;
    default:
}
return value;
}
@Override
protected void setValue(Object element, Object value) {
TestBean bean = (TestBean) element;
switch (m_column) {
case 0:
if (valueChanged(bean.getName(), (String) value)) {
bean.setName((String) value);
}
getViewer().update(bean, null);
break;
case 1:
int index = (Integer) value;
String laptop = bean.getListOfLaptop[index];
if (valueChanged(bean.getLaptop(), laptop)) {
bean.setLaptop(laptop);
}
getViewer().update(bean, null);
break;
default:
}
}
private boolean valueChanged(String previousValue, String currentValue) {
boolean changed = false;
if ((previousValue == null) && (currentValue != null)) {
changed = true;
} else if ((previousValue != null) && (currentValue != null) && (!previousValue.equals(currentValue))) {
changed = true;
}
return changed;
}
}

/ .............. /

class TestContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements(Object inputElement) {
return (Object[]) inputElement;
}
}

/ ......................... /

class TestColumnLabelProvider extends ColumnLabelProvider {
private int m_column;
public TestColumnLabelProvider(int column) {
this.m_column = column;
}
public String getText(Object element) {
String text = null;
if (element instanceof TestBean) {
TestBean testBean = (TestBean) element;
switch (m_column) {
case 0:
text = testBean.getName();
break;
case 1:
text = testBean.getLaptop();
break;
default:
}
}
return text;
}
}

/ ...................... /

Exception

1 Ответ

2 голосов
/ 11 марта 2019

ComboCellEditor значения являются целочисленными индексами в списке значений, которые вы передаете в конструкторе.

Ваш метод getValue вашего класса EditingSupport должен возвращать индекс Integer в список значений.

Методу setValue вашего EditingSupport класса будет присвоен Integer, содержащий выбранный индекс.

...