Динамическое добавление содержимого в средство просмотра таблиц

Я реализую средство просмотра таблиц, подобное этому

folderAssociationTable = componentsRenderer.createTableWidget(container, SWT.BORDER | SWT.MULTI  | SWT.FULL_SELECTION, 2, true);

        folderAssociationTable.addListener(SWT.MeasureItem, new Listener() {
            public void handleEvent(Event event) {
                event.height = 20;
            }
        });
        tableViewer  = new TableViewer(folderAssociationTable);
        tableViewer.getTable().setHeaderVisible(true);
        tableViewer.getTable().setLinesVisible(true);
        tableViewer.setContentProvider(new ArrayContentProvider());


        TableColumn column = new TableColumn(tableViewer.getTable(), SWT.NONE);
        column.setText("CheckBox");
        column.setWidth(100);
        checkBoxColumn = new TableViewerColumn(tableViewer, column);


        column = new TableColumn(tableViewer.getTable(), SWT.NONE);
        column.setText("Source Folder");
        column.setWidth(200);
        sourceFolderColumn = new TableViewerColumn(tableViewer, column);

        column = new TableColumn(tableViewer.getTable(), SWT.NONE);
        column.setText("Target Folder");
        column.setWidth(200);
        targetFolderColumn = new TableViewerColumn(tableViewer, column);

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


person mayur_mitkari    schedule 05.02.2013    source источник


Ответы (1)


Во-первых, если вы просто хотите показать установленные вами флажки, строки и изображения, вам не нужен TableViewer. Вместо этого используйте Table! Средства просмотра полезны, если вам нужно что-то более сложное, например отображение произвольных объектов Java.

  1. Если вы хотите добавить флажки, используйте CheckboxTableViewer и ICheckStateProvider. Вам нужно будет создать таблицу в стиле SWT.CHECK.
  2. Чтобы добавить значения, вам нужно установить некоторые входные данные для вашего средства просмотра. В случае ArrayContentProvider это просто массив или коллекция:

    // ModelObject is whatever type of objects you want to show. Maybe just String...
    List<ModelObject> inputList = new ArrayList<ModelObject>();
    // build the list
    while (...) {
        ModelObject newObject = ...
        inputList.add(newObject);
    }
    
    tableViewer.setInput(inputList);
    

    Если вам нужно изменить список позже, позвоните по номеру tableViewer.refresh().

Дополнительную информацию см. в руководстве по Vogella.

person Alexey Romanov    schedule 05.02.2013
comment
Привет, Алексей, у меня есть таблица, внутри которой я реализую средство просмотра таблиц, один для флажка ir, CheckBoxTableViewer и еще один обычный TableViewer для строкового компонента, поэтому на основе записей строкового компонента я хочу добавить флажки, как я могу это сделать это - person mayur_mitkari; 06.02.2013
comment
Нет, у вас никогда не должно быть двух просмотрщиков таблиц для одной таблицы, это не имеет смысла. - person Alexey Romanov; 06.02.2013
comment
Итак, Алексей, как я могу справиться с этой ситуацией в моем случае, я хочу добавить две простые строки в два столбца и установить флажок в этой строке на основе подсчета, который я хочу делать эти вещи динамически, решение, которое вы предложили выше, я пробовал, но когда я брал строковый массив, подобный этому String[] folderInfo = {folderlist[i],targetFolderPath1}; tableViewer.setInput (информация о папке); путь folderlist[i] и targetfolder добавлялся в первый столбец, который предназначен для флажка, поэтому, пожалуйста, уточните эту ситуацию и как я могу добавить флажок в 1-й столбец - person mayur_mitkari; 06.02.2013
comment
и в случае простой таблицы swt я столкнулся с этой проблемой, поэтому я реализовал TableViewer stackoverflow.com/questions/14701116/ - person mayur_mitkari; 06.02.2013
comment
Во-первых, флажок появится автоматически, если вы добавите SWT.CHECK. Если вы используете ArrayContentProvider, каждый элемент вашего ввода помещается в отдельную строку. Вам нужно будет сделать что-то вроде String[][] folderInfo = new String[] { new String[] {folderlist[i],targetFolderPath1} } и добавить TableLabelProvider, который принимает String[] в качестве элементов. - person Alexey Romanov; 06.02.2013