как мы можем использовать комбо в столбцах jface tableviewer - PullRequest
2 голосов
/ 28 января 2020

Я читаю данные 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;
    }

и таблица выглядит как

enter image description here

Теперь я хочу сделать комбо вместо текста в столбцах. Не могли бы вы помочь, как я могу изменить на комбо вместо текстовых полей, используя мой код для всех

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...