2014-03-12 56 views
0

上午初学者到SWT,请人帮忙, 我的问题是: 我有一个表,其中有10列, 第一列具有复选框和列的其余部分是从数据库填充, 当我检查复选框我想,要选择perticular行,如何选择整个TableViewer的行时复选框点击(表中的第一列各行中的复选框)

我正在粘贴下面我表的代码,

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复选框时选择整个行。 任何一个pleeeease帮助我尽可能早....

+0

有没有使用'CheckboxTableViewer'理由吗? –

+0

格雷格,实际上我不关于CheckboxTableViewer。我如何使用它?我可以使用而不是Tableviewer吗?要么 ?你可以举一个小例子... – Msn

回答

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())); 
    } 
}); 
+0

CheckboxTableViewer mainTable = new CheckboxTableViewer(content,SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);这段代码给了我一个警告,“构造函数CehckboxTableViewer(Composite,int)已被弃用”。和checkboxTableViewer上的交叉栏....我该怎么办? – Msn

+0

对不起,我忘记了'CheckboxTableViewer.newCheckList'是批准构建查看器的方式。答案已更新。 –

+0

谢谢greg ...非常感谢....它的工作原理:) – Msn

1

简单的方法:表中的第一列具有复选框每一行中可以选择 或不


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); 
       } 
     }   
    }    

这是给你....感谢有用

+0

谢谢.. @ bharat –

相关问题