2010-08-19 4 views
5

Ho una tabella SWT che sto istanziando con lo stile SWT.CHECK per visualizzare una casella di controllo accanto a ogni riga. I miei utenti hanno richiesto un'altra casella di controllo nella riga di intestazione della tabella per consentire loro di selezionare/deselezionare tutte le righe con un clic.Come posso inserire una casella di controllo "(de) select all" in un'intestazione Table SWT?

Non riesco a vedere alcun modo ovvio per farlo, e ho trovato solo esempi Swing/JTable tramite Google. Qualcuno sa come fare questo? Spero che sia possibile senza re-implementare la tabella o ricadere su un menu contestuale dell'intestazione.

risposta

3

si potrebbe usare un FormLayout per consentire accatastamento di oggetti, quindi aggiungere una casella di controllo in cima della tabella come segue:

FormData fd = new FormData(); 
fd.left = new FormAttachment(table, 5, SWT.LEFT); 
fd.top = new FormAttachment(table, 5, SWT.TOP); 
checkbox.setLayoutData(fd); 
checkbox.moveAbove(table); 

Si potrebbe trovare utile per allineare correttamente la casella di controllo per ottenere l'altezza di la riga dell'intestazione della tabella con table.getHeaderHeight().

+0

Scusate la risposta lenta. Ho intenzione di provarlo per secoli. Ci provo e accetto se fa quello che penso che sarà :) Grazie! –

+0

Nessun problema. Lascia un commento se non funziona come previsto. –

6

È sufficiente creare due immagini di casella di controllo. Il primo senza tick e il secondo con tick. Ora aggiungi la prima immagine all'intestazione tableColumn. Successivamente aggiungi il listener a tableColumn in modo che quando fai clic sul pulsante per la prima volta, il metodo table.selectALL() venga attivato insieme alla modifica dell'immagine dell'intestazione tableColumn sulla seconda. Quando si fa clic nuovamente sul pulsante, chiamare il metodo table.deSelectAll() e sostituire l'intestazione tableColumn con la prima immagine.

È possibile utilizzare questa condizione:

Quando la casella di controllo (immagine) viene cliccato, utilizzare un ciclo for per verificare se, le caselle di controllo nella tabella sia selezionata. se qualcuno viene trovato, controllare quindi il metodo table.deSelectAll(), altrimenti il ​​metodo table.selectAll() è attivato da .

Non ci saranno problemi per la "casella" durante il ridimensionamento tabella/vedova.

tableColumn0.addListener(SWT.Selection, new Listener() { 
    @Override 
    public void handleEvent(Event event) { 
     // TODO Auto-generated method stub 
     boolean checkBoxFlag = false; 
     for (int i = 0; i < table.getItemCount(); i++) { 
      if (table.getItems()[i].getChecked()) { 
       checkBoxFlag = true; 
      } 
     } 

     if (checkBoxFlag) { 
      for (int m = 0; m < table.getItemCount(); m++) { 
       table.getItems()[m].setChecked(false); 
       tableColumn0.setImage(new Image(Display.getCurrent(), 
         "images/chkBox.PNG")); 

       table.deselectAll(); 

      } 
     } else { 
      for (int m = 0; m < table.getItemCount(); m++) { 
       table.getItems()[m].setChecked(true); 
       tableColumn0.setImage(new Image(Display.getCurrent(), 
         "images/chkBox2.PNG")); 

       table.selectAll(); 
      } 
     } 

    } 
}); 
0

completamente descrivere questo codice :: de) seleziona tutto casella di controllo”in una tabella SWT intestazione


public class TaskView extends ViewPart { 

    public static TableItem std_item; 
    public static List<Student> std=new ArrayList<Student>(); 
    public static Table table; 
    private TableColumn col_name_add; 
    private TableColumn col_image_add; 
    static int countcheck; 
    static int staticno=1; 
    static int check=0,uncheck=0; 

    public TaskView() { 
     setTitleImage(ResourceManager.getPluginImage("RCP_Demo", "icons/Tasksview.png")); 
    } 

    @Override 
    public void createPartControl(Composite parent) { 
     parent.setLayout(null); 

     ////////// Table Create 
     table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION|SWT.CHECK|SWT.CENTER); 
     ////SWT.CHECK: Display first column check box 

     table.addSelectionListener(new SelectionAdapter() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 

       TableItem item = table.getItem(table.getSelectionIndex()); 
       for(int col=1;col<table.getColumnCount();col++) 
       { 
        //Table_Column Checked or Not 
        if(item.getChecked()) 
         item.setChecked(false); 
        else 
         item.setChecked(true); 

        /////////First column value get 
        if(col==1) 
        { 
         System.out.println(item.getText(col)); 
        } 
        TableItem[] itemCheck = table.getItems(); 
        for(int i=0;i<table.getItemCount();i++) 
        { 
         if(itemCheck[i].getChecked()) 
          ++check; 
         else 
          ++uncheck; 
        } 
        if(check==table.getItemCount()) 
         //Change column image:Checkbox checked 
         col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/check.png")); 
        else 
         //Change column image:Checkbox Unchecked 
         col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png")); 

        //System.out.println("Check:"+check+"uncheck"+uncheck); 
        check=0; 
        uncheck=0; 
       } 
      } 
     }); 
     table.setBounds(10, 10, 343, 297); 
     table.setHeaderVisible(true); 
     table.setLinesVisible(true); 

     ////// SWT Table header Column 
     col_image_add = new TableColumn(table, SWT.LEFT); 
     col_image_add.addSelectionListener(new SelectionAdapter() { 
      @Override 
      public void widgetSelected(SelectionEvent e) { 
       //All Row selected or Not 
       //column Icon change checked(selected) or not 

       System.out.println("Total Row Count:"+table.getItemCount()); 
       TableItem item[] = table.getItems(); 
       if(staticno==1) 
       { 
        for(int i=0;i<table.getItemCount();i++) 
        { 
         item[i].setChecked(true); 
         col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/check.png")); 
        } 
        staticno=0; 
       }else 
       { 
        for(int i=0;i<table.getItemCount();i++) 
        { 
         item[i].setChecked(false); 
         col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png")); 
        } 
        staticno=1; 
       } 
      } 
     } 
     }); 
     col_image_add.setMoveable(true); 
     col_image_add.setToolTipText("Click"); 
     col_image_add.setImage(ResourceManager.getPluginImage("RCP_Demo", "icons/uncheck.png")); 
     col_image_add.setWidth(36); 

     //Dynamic column Name add 

     String[] Col_names={"Stud_id","Stud_Name","Stud_Gender"}; 
     for(int i=0;i<Col_names.length;i++) 
     { 
      col_name_add = new TableColumn(table,SWT.CENTER); 
      col_name_add.setWidth(100); 
      col_name_add.setText(Col_names[i]); 
     } 
    } 
    public TableViewer getViewer() { 
      return null; 
    } 
} 

grazie ....

+0

specialmente grazie ...... Martin McNulty ... buona giornata –