org.eclipse.core.runtime.AssertionFailedException: утверждение не выполнено:

Я пытаюсь создать таблицу со столбцом 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.*;

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

class TestBean {частное имя строки; личный ноутбук String; 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;
}
}

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

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.*;
значения - это целые индексы в списке значений, которые вы даете ему в конструкторе.


person Debasish Halder    schedule 11.03.2019    source источник
comment
Я не могу добавить код. Похоже, ваш пост - это в основном код; пожалуйста, добавьте более подробную информацию. эта ошибка появляется, когда я форматировал свой код.   -  person greg-449    schedule 11.03.2019
comment
@ greg-449, пожалуйста, дайте мне свой адрес электронной почты, я могу отправить вам свой код   -  person Debasish Halder    schedule 11.03.2019
comment
@ greg-449 Я добавил сюда свой код, пожалуйста, посмотрите мой код   -  person Debasish Halder    schedule 11.03.2019
comment
У меня есть одно сомнение. Подскажите, пожалуйста, как отключить / включить ComboBoxCellEditor в таблице?   -  person Debasish Halder    schedule 11.03.2019


Ответы (1)


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

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

Либо поле со списком пустое, либо значение, которое вы устанавливаете, не равно ComboCellEditor. Покажите нам минимальный воспроизводимый пример

person greg-449    schedule 11.03.2019
comment
Это отдельный вопрос. Класс EditingSupport имеет метод _1_ - person Debasish Halder; 12.03.2019
comment
открытый класс Test {public static void main (String [] args) {Shell shell = new Shell (); shell.setText («Пример TableViewer»); Макет GridLayout = новый GridLayout (); shell.setLayout (макет); Композитный композит = новый композит (оболочка, SWT.NONE); композитный.setLayoutData (новый GridData (SWT.FILL, SWT.CENTER, true, true)); композитный.setLayout (новый GridLayout (1, false)); Таблица testTable = новая таблица (составная, SWT.BORDER); testTable.setLinesVisible (правда); testTable.setHeaderVisible (истина); GridData tableData = новые данные GridData (SWT.FILL, SWT.FILL, true, false); tableData.heightHint = 300; testTable.setLayoutData (tableData); TableViewerColumn columnViewer = null; String [] columnNames = {"Имя", "Ноутбуки"}; TableViewer testTableViewer = новый TableViewer (testTable); для (int i = 0; i ‹columnNames.length; i ++) {columnViewer = новый TableViewerColumn (testTableViewer, SWT.LEFT); columnViewer.getColumn (). setText (columnNames [i]); если (columnNames [i] .equals ("Имя")) {columnViewer.getColumn (). setWidth (200); } иначе, если (columnNames [i] .equals ("Ноутбуки")) {columnViewer.getColumn (). setWidth (300); } columnViewer.getColumn (). setResizable (true); columnViewer.getColumn (). setMoveable (правда); columnViewer.setLabelProvider (новый TestColumnLabelProvider (i)); } testTableViewer.setContentProvider (новый TestContentProvider ()); testTableViewer.setColumnProperties (columnNames); TestBean [] testBeans = новый TestBean [5]; for (int i = 0; i ‹5; i ++) {TestBean bean = новый TestBean (); TableViewerColumn [] getTableViewerColumns = getTableViewerColumns (testTableViewer); для (int j = 0; j ‹getTableViewerColumns.length; j ++) {getTableViewerColumns [j] .setEditingSupport (новый TestEditingSuport (testTableViewer, j, bean.getListOfLaptop)); } bean.setName ("Дебасиш" + i); bean.setLaptop (bean.getListOfLaptop [i]); testBeans [i] = bean; } testTableViewer.setInput (testBeans); shell.open (); Отображение display = shell.getDisplay (); в то время как (! shell.isDisposed ()) {если (! display.readAndDispatch ()) display.sleep (); }} общедоступный статический TableViewerColumn [] getTableViewerColumns (TableViewer tableViewer) {TableColumn [] columns = tableViewer.getTable (). getColumns (); TableViewerColumn [] viewerColumns = новый TableViewerColumn [columns.length]; for (int i = 0; i ‹columns.length; i ++) {TableColumn tableColumn = columns [i]; viewerColumns [i] = (TableViewerColumn) tableColumn.getData (Policy. JFACE + ".columnViewer"); } return viewerColumns; }} - person greg-449; 12.03.2019