как выбрать всю строку tableviewer при установленном флажке (первый столбец таблицы имеет флажки в каждой строке)

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

я вставляю свой код таблицы ниже,

    public static void main(String arg[])
    {
      // shell and display declared here

            mainTable = new TableViewer(content,  SWT.H_SCROLL| SWT.V_SCROLL | SWT.BORDER |SWT.DM_FILL_BACKGROUND|SWT.FULL_SELECTION);

            mainTable .getTable().setHeaderVisible(true);
            mainTable .getTable().setLinesVisible(true);
            mainTable .setContentProvider(new ArrayContentProvider());    

            // COLUM FOR PLACING THE CHECK BOXES
            TableColumn columncOL=new TableColumn(mainTable .getTable(),SWT.NONE);
            columncOL.setText("");
            columncOL.setWidth(40);

            TableViewerColumn columnaC=new TableViewerColumn(mainTable ,columncOL);
            columnaC.setLabelProvider(new ColumnLabelProvider(){

            Map<Object, Button> buttons = new HashMap<Object, Button>();
            @Override
                public void update(ViewerCell cell) {

                    TableItem item = (TableItem) cell.getItem();
                            Button button;
                            if(buttons.containsKey(cell.getElement()))
                            {
                                button = buttons.get(cell.getElement());
                            }
                            else
                            {
                                button = new Button((Composite) cell.getViewerRow().getControl(),SWT.CHECK);

                                String s = "Item 1";

                                button.setData(s, "Some other info or object here");
                                s = "Item 2";

                                button.setData(s, "This is item two");
                                //buttons.put(cell.getElement(), button);
                            }
                            TableEditor editor = new TableEditor(item.getParent());
                            editor.grabHorizontal  = true;
                            editor.grabVertical = true;
                            editor.setEditor(button , item, cell.getColumnIndex());
                            editor.layout();
                        }

                    });

                    // CREATING 1st COLUMNS
            TableColumn column1Head=new TableColumn(mainTable.getTable(),SWT.NONE);
                    column1Head.setText("col1");
                    column1Head.setWidth(200);
                    // setting column input
            TableViewerColumn column1=new TableViewerColumn(mainTable,column1Head);
                    column1.setLabelProvider(new ColumnLabelProvider()
                    {
                        public String getText(Object Element)
                        {
                            Student ap=(Student )Element;
                            return ap.col1();
                        }
                    });

    }

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


person Shenoy    schedule 12.03.2014    source источник
comment
Есть ли причина, по которой вы не используете CheckboxTableViewer?   -  person greg-449    schedule 12.03.2014
comment
Грег, на самом деле я не знаю о CheckboxTableViewer. как я могу его использовать? можно ли использовать вместо Tableviewer? или же ? можно небольшой пример....   -  person Shenoy    schedule 12.03.2014


Ответы (2)


Используйте CheckboxTableViewer, чтобы отобразить таблицу с флажками:

mainTable = CheckboxTableViewer.newCheckList(content, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);

Чтобы выбрать строку, когда флажок установлен, вам нужно будет использовать addCheckStateListener для выбора отмеченной строки, что-то вроде:

mainTable.addCheckStateListener(new ICheckStateListener()
 {
   @Override
   public void checkStateChanged(CheckStateChangedEvent event)
   {
     if (event.getChecked())
       mainTable.setSelection(new StructuredSelection(event.getObject()));
   }
 });
person greg-449    schedule 12.03.2014
comment
CheckboxTableViewer mainTable = новый CheckboxTableViewer (содержимое, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION); этот код дает мне предупреждение о том, что конструктор CehckboxTableViewer (Composite, int) устарел. и перекладина на флажке TableViewer.... что мне делать? - person Shenoy; 12.03.2014
comment
Извините, я забыл, что CheckboxTableViewer.newCheckList — это утвержденный способ создания средства просмотра. Ответ обновлен. - person greg-449; 12.03.2014
comment
Грег, еще кое-что, пожалуйста, как получить индекс строки или значения в строке выбранного флажка... пожалуйста, помогите мне..... заранее спасибо - person Shenoy; 12.03.2014
comment
event.getObject() возвращает объект, который ваш контент-провайдер предоставляет для строки, поэтому это объект во входном массиве. - person greg-449; 12.03.2014

Простой способ: первый столбец таблицы имеет флажки в каждой строке, которые можно выбрать или нет.


CheckboxTableViewer tableViewer = CheckboxTableViewer.newCheckList(parent, SWT.BORDER | SWT.FULL_SELECTION);
Table table = tableViewer.getTable();
table.addListener(SWT.Selection, new Listener()
    {
        @Override
        public void handleEvent(Event e) {
             Table table = (Table) e.widget;
                TableItem item = table.getItem(table.getSelectionIndex());
                for (int col = 0; col < table.getColumnCount(); col++)
                {
                    //Table_Column Checked or Not
                    if(item.getChecked())
                        //return true
                        //all ready checked(true) to change unchecked(false)
                        item.setChecked(false);
                    else
                        //unchecked(false) to checked(true) each row
                        item.setChecked(true);  
                }
        }           
    }               

это полезно для вас .... спасибо

person Chetan Bhagat    schedule 17.01.2017