2013-04-23 25 views
1

我構建了一個Table(org.eclipse.swt.widgets.Table),並使用TableEditor在每個TableItem(行)上添加2個複選框。從TableItem檢索控件

TableItem tableItem = new TableItem(tableClientes, SWT.NONE); 
TableEditor editor = new TableEditor(tableClientes); 

Button checkEnviar = new Button(tableClientes, SWT.CHECK); 
checkEnviar.pack(); 

editor.minimumWidth = checkEnviar.getSize().x + 5; 
editor.horizontalAlignment = SWT.CENTER; 
editor.setEditor(checkEnviar, tableItem, 0); 

editor = new TableEditor(tableClientes); 

Button checkMarcar = new Button(tableClientes, SWT.CHECK); 
checkMarcar.pack(); 

editor.minimumWidth = checkMarcar.getSize().x; 
editor.horizontalAlignment = SWT.CENTER; 
editor.setEditor(checkMarcar, tableItem, 1); 

現在我需要讀取每一行上的每個複選框的狀態,但我不知道如何。

我試着檢索表項是這樣的:

tableClientes.getItem(x) 

但它的內容,我不能檢索複選框狀態或操縱它。任何想法如何做到這一點?

+0

你不能這樣做'tableClientes.getItem(X).isSelected() ;'? – 2013-04-23 22:10:13

+0

org.eclipse.swt.widgets.TableItem沒有屬性.getState(); – MBarni 2013-04-23 22:12:04

+0

是的,很抱歉,請參閱編輯。除了要點之外,問題是,你不能訪問它的方法/屬性嗎? – 2013-04-23 22:12:32

回答

2

一個簡單的解決方案是使用setData()方法Widget類。例如看到下面的代碼(特別是最後大部分按鈕選擇監聽器,但一個有效的控件實例做測試):

import org.eclipse.swt.SWT; 
import org.eclipse.swt.custom.TableEditor; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.layout.GridLayout; 
import org.eclipse.swt.widgets.Button; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.Shell; 
import org.eclipse.swt.widgets.Table; 
import org.eclipse.swt.widgets.TableColumn; 
import org.eclipse.swt.widgets.TableItem; 

public class TableItemTest { 
    public static void main(String[] args) { 
     Display display = new Display(); 
     Shell shell = new Shell(display); 
     shell.setLayout(new GridLayout(1, false)); 
     GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true); 
     shell.setLayoutData(gridData); 

     final Table table = new Table(shell, SWT.BORDER); 
     table.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); 
     table.setHeaderVisible(true); 
     table.setLinesVisible(true); 
     table.setBounds(new org.eclipse.swt.graphics.Rectangle(47,67,190,70)); 

     TableColumn tableColumn = new TableColumn(table, SWT.NONE); 
     tableColumn.setWidth(180); 
     tableColumn.setText("Check Column"); 

     for(int i=0; i<10; i++){ 
      Button checkButton = new Button(table, SWT.CHECK); 
      checkButton.pack(); 

      TableItem tableItem=new TableItem(table,SWT.NONE); 
      TableEditor editor = new TableEditor (table); 

      editor.minimumWidth = checkButton.getSize().x; 
      editor.horizontalAlignment = SWT.CENTER; 
      editor.setEditor(checkButton, tableItem, 0); 
      tableItem.setData("CHECK_BOX", checkButton); //Point to notice 
     } 

     Button checkState = new Button(shell, SWT.PUSH); 
     checkState.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); 
     checkState.setText("Check State"); 
     checkState.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent e) { 
       TableItem[] items = table.getItems(); 
       for (int i = 0; i < items.length; i++) { 
        Object data = items[i].getData("CHECK_BOX"); 
        if(data != null){ 
         Button checkButton = (Button)data; 
         if(!checkButton.isDisposed()) 
          System.out.println("For row " + (i+1) + " check status is " + checkButton.getSelection()); 
        } 
       } 
      } 
     }); 

     shell.setSize(220, 400); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 
}