Я читаю данные Excel и беру заголовки (только первую строку) в качестве своих столбцов и добавляю их в список, и этот список добавляется в качестве входных данных в мой просмотрщик таблиц для отображения данных в моей таблице. Я создаю столбцы таблиц и добавляю провайдера меток. Я могу видеть данные в таблице. Теперь я хочу отобразить все текстовые поля как комбо в каждом столбце. Как я могу добавить комбо для каждого столбца? мой код похож на мой класс просмотра таблицы
public class TableViewerExample {
public TableViewerExample(Shell shell) {
TableViewer viewer = new TableViewer(shell, SWT.BORDER | SWT.FULL_SELECTION);
TableViewerColumn upDownColumn = new TableViewerColumn(viewer, SWT.NONE);
upDownColumn.getColumn().setText("Display Order");
upDownColumn.getColumn().setWidth(200);
upDownColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getDisplayOrder();
}
});
TableViewerColumn checkboxColumn = new TableViewerColumn(viewer, SWT.NONE);
checkboxColumn.getColumn().setText("Checkbox Selection");
checkboxColumn.getColumn().setWidth(200);
checkboxColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getCheckboxSelection();
}
});
TableViewerColumn uniqueFieldsColumn = new TableViewerColumn(viewer, SWT.NONE);
uniqueFieldsColumn.getColumn().setText("Unique Fields");
uniqueFieldsColumn.getColumn().setWidth(200);
uniqueFieldsColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getUniqueFields();
}
});
TableViewerColumn inputFieldNameColumn = new TableViewerColumn(viewer, SWT.NONE);
inputFieldNameColumn.getColumn().setText("Input Field Name");
inputFieldNameColumn.getColumn().setWidth(200);
inputFieldNameColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getInputFieldName();
}
});
TableViewerColumn dataTypeColumn = new TableViewerColumn(viewer, SWT.NONE);
dataTypeColumn.getColumn().setText("Data Type");
dataTypeColumn.getColumn().setWidth(200);
dataTypeColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getDataType();
}
});
TableViewerColumn inputFieldFormatColumn = new TableViewerColumn(viewer, SWT.NONE);
inputFieldFormatColumn.getColumn().setText("Input Field Format");
inputFieldFormatColumn.getColumn().setWidth(200);
inputFieldFormatColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getInputFieldFormat();
}
});
TableViewerColumn displayNameColumn = new TableViewerColumn(viewer, SWT.NONE);
displayNameColumn.getColumn().setText("Display Name");
displayNameColumn.getColumn().setWidth(200);
displayNameColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getDisplayName();
}
});
TableViewerColumn displayFormatColumn = new TableViewerColumn(viewer, SWT.NONE);
displayFormatColumn.getColumn().setText("Display Format");
displayFormatColumn.getColumn().setWidth(200);
displayFormatColumn.setLabelProvider(new ColumnLabelProvider() {
@Override
public String getText(Object element) {
return ((DataSourceModel) element).getDisplayFormat();
}
});
viewer.setContentProvider(ArrayContentProvider.getInstance());
System.out.println(RetrieveExcelData.getDataSourceFieldsList());
viewer.setInput(RetrieveExcelData.getDataSourceFieldsList());
viewer.getTable().setLinesVisible(true);
viewer.getTable().setHeaderVisible(true);
}
public static void main(String[] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.setLayout(new FillLayout());
new TableViewerExample(shell);
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
setinput class
public class RetrieveExcelData {
public static List getDataSourceFieldsList() {
String filename = "D:\\ServiceOrders_point_Org_morethan500.xlsx";
List<List<XSSFCell>> sheetData = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(filename)) {
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet myExcelSheet = workbook.getSheetAt(0);
XSSFRow row = (XSSFRow )myExcelSheet.getRow(0);
Iterator cells=row.cellIterator();
List<XSSFCell> data = new ArrayList<>();
while (cells.hasNext()) {
XSSFCell cell = (XSSFCell) cells.next();
data.add(cell);
}
sheetData.add(data);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return showExcelData(sheetData);
}
private static List showExcelData(List<List<XSSFCell>> sheetData) {
List<DataSourceModel> resultList = new ArrayList();
// Iterates the data and print it out to the console.
for (List<XSSFCell> data : sheetData) {
for (XSSFCell cell : data) {
DataSourceModel dataSourceModel=new DataSourceModel(cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue(), cell.getStringCellValue());
resultList.add(dataSourceModel);
}
}
return resultList;
}
мой класс модели
public class DataSourceModel {
private String displayOrder;
private String checkboxSelection;
private String uniqueFields;
private String inputFieldName;
private String dataType;
private String inputFieldFormat;
private String displayName;
private String displayFormat;
public DataSourceModel(String displayOrder,String checkboxSelection,String uniqueFields,String inputFieldName,String dataType, String inputFieldFormat, String displayName,String displayFormat) {
this.displayOrder=displayOrder;
this.checkboxSelection=checkboxSelection;
this.uniqueFields=uniqueFields;
this.inputFieldName=inputFieldName;
this.dataType=dataType;
this.inputFieldFormat=inputFieldFormat;
this.displayName=displayName;
this.displayFormat=displayFormat;
}
public String getDisplayOrder() {
return displayOrder;
}
public void setDisplayOrder(String displayOrder) {
this.displayOrder = displayOrder;
}
public String getCheckboxSelection() {
return checkboxSelection;
}
public void setCheckboxSelection(String checkboxSelection) {
this.checkboxSelection = checkboxSelection;
}
public String getUniqueFields() {
return uniqueFields;
}
public void setUniqueFields(String uniqueFields) {
this.uniqueFields = uniqueFields;
}
public String getInputFieldName() {
return inputFieldName;
}
public void setInputFieldName(String inputFieldName) {
this.inputFieldName = inputFieldName;
}
public String getDataType() {
return dataType;
}
public void setDataType(String dataType) {
this.dataType = dataType;
}
public String getInputFieldFormat() {
return inputFieldFormat;
}
public void setInputFieldFormat(String inputFieldFormat) {
this.inputFieldFormat = inputFieldFormat;
}
public String getDisplayName() {
return displayName;
}
public void setDisplayName(String displayName) {
this.displayName = displayName;
}
public String getDisplayFormat() {
return displayFormat;
}
public void setDisplayFormat(String displayFormat) {
this.displayFormat = displayFormat;
}
и таблица выглядит как
Теперь я хочу сделать комбо вместо текста в столбцах. Не могли бы вы помочь, как я могу изменить на комбо вместо текстовых полей, используя мой код для всех