2015-07-24 1 views
0

J'utilise Nebula Grid pour afficher une feuille Excel dans mon application RCP. J'ai une exigence pour sélectionner toutes les lignes. Mon code est le suivant:Nebula GridViewer La sélection ne fonctionne pas

private void addKeyListener() { 
    this.gv.getGrid().addKeyListener(new KeyListener() { 

     @Override 
     public void keyPressed(KeyEvent arg0) { 

     } 

     @Override 
     public void keyReleased(KeyEvent e) { 

      if(e.stateMask==SWT.CTRL && e.keyCode =='a'){ 
       ArrayList al = (ArrayList) gv.getInput(); 
       //System.out.println("ctrl+c pressed"); 
       gv.setSelection(new StructuredSelection(al.toArray()),true); 

       //gv.getGrid().setSelection(0, al.size()-1); 
       //gv.getGrid().selectAll(); 
       //gv.getGrid().setSelection(new int[]{1,2}); 
       //gv.getGrid().setSelection(1); 

       //gv.getGrid().setSelectionEnabled(true); 
       //gv.getGrid().select(new int[]{1,2,3}); 
       //gv.refresh(); 
      } 

mais cela ne fonctionne pas. Qu'est-ce que je rate ?

Répondre

2

Vous n'avez pas mentionné le type de comportement de sélection utilisé par la grille dans votre code. c'est-à-dire, sélection de ligne ou de cellule, sélections simples ou multiples (SWT.SINGLE & styles SWT.MULTI).

Définir le style à SWT.MULTI lors de l'initialisation de la grille semble faire l'affaire.

Voici l'extrait qui fonctionne pour moi.

public class GridSnippet { 
    public static void main (String [] args) { 
     Display display = new Display(); 
     Shell shell = new Shell (display); 
     shell.setLayout(new FillLayout()); 

     final Grid grid = new Grid(shell,SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL | SWT.MULTI); 
     grid.setHeaderVisible(true); 
     // grid.setCellSelectionEnabled(true); 
     GridColumn column = new GridColumn(grid,SWT.NONE); 
     column.setText("Column 1"); 
     column.setWidth(100); 
     GridItem item1 = new GridItem(grid,SWT.NONE); 
     item1.setText("First Item"); 
     GridItem item2 = new GridItem(grid,SWT.NONE); 
     item2.setText("Second item"); 
     GridItem item3 = new GridItem(grid,SWT.NONE); 
     item3.setText("Third Item"); 
     grid.addKeyListener(new KeyListener() { 

      @Override 
      public void keyPressed(KeyEvent arg0) { 
      } 

      @Override 
      public void keyReleased(KeyEvent e) { 
       if(e.stateMask==SWT.CTRL && e.keyCode =='a'){ 
        System.out.println("ctrl+c pressed"); 

        grid.selectAll(); 
       } 
      } 
     }); 

     shell.setSize(200,200); 
     shell.open(); 
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) display.sleep(); 
     } 
     display.dispose(); 
    } 
} 
+0

j'utilisais les bits de style suivants 'gv = new GridTableViewer (this.container, SWT.BORDER | SWT.V_SCROLL \t \t \t \t | SWT.H_SCROLL | SWT.FULL_SELECTION);' mais cela n'a pas fonctionné . J'ai changé cela à 'gv = new GridTableViewer (this.container, SWT.BORDER | SWT.V_SCROLL \t \t \t \t | SWT.H_SCROLL | SWT.MULTI);'. Le selct tout fonctionne maintenant. Merci – ssdimmanuel