2010-08-19 22 views
5

J'ai une table SWT que j'instancie avec le style SWT.CHECK afin d'afficher une case à cocher à côté de chaque ligne. Mes utilisateurs ont demandé une autre case à cocher dans la ligne d'en-tête de la table afin de leur permettre de sélectionner/désélectionner toutes les lignes en un seul clic.Comment puis-je mettre une case à cocher "(désélectionner tout" dans un en-tête de table SWT?

Je ne vois aucune façon évidente de le faire, et j'ai seulement trouvé des exemples de Swing/JTable par Google. Est-ce que quelqu'un sait comment faire ça? J'espère que c'est possible sans ré-implémenter Table ou retomber sur un menu contextuel d'en-tête.

Répondre

3

Vous pouvez utiliser un FormLayout pour permettre empiler des objets, puis ajouter une case à cocher sur de la table comme suit:

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

Vous trouverez peut-être utile pour aligner correctement la case à cocher pour obtenir la hauteur de la ligne d'en-tête de la table avec table.getHeaderHeight().

+0

Désolé pour la réponse lente. Je voulais essayer ça depuis des lustres. Je vais essayer et accepter si ça fait ce que je pense que ça va :) Merci! –

+0

Pas de problème. Déposez un commentaire si cela ne fonctionne pas comme prévu. –

6

Il suffit de créer deux images de case à cocher. Le premier sans une coche et le deuxième ayant une coche. Maintenant, ajoutez la première image à l'en-tête tableColonne. Après cela, ajoutez listener à tableColumn de telle sorte que lorsque vous cliquez sur le bouton pour la première fois, la méthode table.selectALL() doit être déclenchée avec la modification de l'image d'en-tête tableColumn en deuxième. Lorsque vous cliquez à nouveau sur le bouton, appelez la méthode table.deSelectAll() et remplacez l'en-tête tableColumn par la première image.

Vous pouvez utiliser cette condition:

Lorsque la case à cocher (image) est cliqué, utilisez une boucle pour vérifier si, l'une des cases du tableau est cochée. si quelqu'un est trouvé vérifié puis déclenche la méthode table.deSelectAll(), sinon déclenche méthode table.selectAll().

Il n'y aura aucun problème pour la "case à cocher" lors du redimensionnement de table/veuve.

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

décrire entièrement ce code :: de) tout sélectionner » case à cocher dans un tableau SWT tête


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

merci ....

+0

spécialement merci ...... Martin McNulty ... Bonne journée –