2010-08-19 16 views
5

Tengo una tabla SWT que estoy instanciando con el estilo SWT.CHECK para mostrar una casilla de verificación al lado de cada fila. Mis usuarios han solicitado otra casilla de verificación en la fila de encabezado de la tabla para permitirles seleccionar/deseleccionar todas las filas con un solo clic.¿Cómo puedo poner una casilla de verificación "(de) seleccionar todo" en un encabezado de mesa SWT?

No veo ninguna manera obvia de hacerlo, y solo he encontrado ejemplos de Swing/JTable a través de Google. ¿Alguien sabe como hacer esto? Espero que sea posible sin volver a implementar Table o volver a caer en un menú contextual del encabezado.

Respuesta

3

Se puede usar un FormLayout para permitir apilar objetos, a continuación, añadir una casilla de verificación en la parte superior de la tabla de la siguiente manera:

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

Puede que le resulte útil para alinear correctamente la casilla de verificación para obtener la altura de la fila del encabezado de la tabla con table.getHeaderHeight().

+0

la respuesta lenta He querido probar esto por siglos. Lo intentaré y lo aceptaré si hace lo que creo que va a hacer :) ¡Gracias! –

+0

No hay problema. Deja un comentario si no funciona como se esperaba. –

6

Solo crea dos imágenes de casilla de verificación. Primero sin marca y segundo con marca. Ahora agregue la primera imagen al encabezado tableColumn. Después de eso, agregue listener a tableColumn de tal forma que cuando haga clic en el botón por primera vez, se debe disparar el método table.selectALL() junto con cambiar la imagen del encabezado tableColumn a la segunda. Cuando vuelva a hacer clic en el botón, llame al método table.deSelectAll() y reemplace el encabezado tableColumn con la primera imagen.

Se puede utilizar esta condición:

Cuando se hace clic en la casilla de verificación (imagen), utilizar un bucle para comprobar si, cualquiera de las casillas de la tabla se comprueba. si alguien se encuentra marcado, entonces tabla de fuego.deSelectAll() método, sino fuego table.selectAll() método.

No habrá ningún problema para la "casilla" durante el cambio de tamaño de la tabla/viuda.

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

totalmente describir este código :: DE) casilla Seleccionar todo”en una tabla SWT cabecera


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

gracias ....

Lo siento por
+0

especialmente gracias ...... Martin McNulty ... que tengas un buen día –

Cuestiones relacionadas