Question

Ce que je voudrais faire est d'être en mesure d'onglet entre les éléments du tableau.

Je suis actuellement en train de créer ma table comme ça.

this.tableViewer = 
            new TableViewer(parent , SWT.FULL_SELECTION);

   tableViewer.setUseHashlookup(true);
        table = tableViewer.getTable();

        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.grabExcessVerticalSpace = true;
        table.setLayoutData(gridData);

        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        ...

   /** Create the Cell Editor Array - will hold all columns **/
        editors = new CellEditor[table.getColumnCount()];
        /** Cell Editor Row 1 **/


  /** Set the column properties **/
        tableViewer.setColumnProperties(columnNames);

        /** Assign the cell editors to the viewer **/
        tableViewer.setCellEditors(editors);

        /** Set the cell modifier for the viewer **/
        tableViewer.setCellModifier(new MyCellModifier(this));
        //Create the Table Viewer

        /** Table Viewer Content and Label Provider **/
        tableViewer.setContentProvider(new MyContentProvider(this));
        tableViewer.setLabelProvider(new MyLabelProvider());

Mais je ne sais pas comment mettre en place la tabulation. Tout le reste fonctionne aussi loin que des colonnes d'édition, montrant des données, etc. Juste collé sur cette dernière partie.

Si j'ai oublié la documentation évidente ou javadocs -. Mes excuses et pointant même à ceux serait grand

Était-ce utile?

La solution

Je pense par onglet par défaut ne saute pas de cellule à cellule dans une table de SWT. Au contraire, il parcourt le contrôle suivant. Donc, vous aurez également besoin de lui dire de ne pas traverser quand on appuie sur l'onglet

KeyListener keyListener = new KeyLisener()
{
    public void keyPressed(KeyEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
        {
            // There are numerous setSelection methods.  I'll leave this to you. 
            tableViewer.getTable().setSelection(...)
        }
    }

    public void keyReleased(KeyEvent evt){}
}

TraverseListener traverseListener = new TraverseListener()
{
    public void keyTraversed(TraverseEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
            evt.doit = false;
    }
}

tableViewer.getTable().addKeyListener(keyListener);
tableViewer.getTable().addTraverseListener(traverseListener);

En outre, comme suggéré derBiggi, les auditeurs doivent être ajoutés à l'objet de la table, pas le TableViewer.

Autres conseils

Bien que la solution thehiatus est affiché très bas niveau et probablement travailler (je ne l'ai pas testé), JFace vous donne un cadre pour ce problème spécifique. Voir la org.eclipse.jface.viewers.TableViewerFocusCellManager ainsi que des cours de org.eclipse.jface.viewers.CellNavigationStrategy pour résoudre ce problème.

Je ne pouvais pas obtenir le comportement souhaité avec un TraverseListener (il ne traverserais dans le tableau), et j'eu du mal à travailler avec un FocusCellManager et CellNavigationStrategy. J'ai finalement trouvé cette solution qui me permet d'onglet d'une colonne à l'intérieur d'une ligne et activer automatiquement l'éditeur.

Viewer viewer =  ...

TableViewerFocusCellManager focusCellManager =
    new TableViewerFocusCellManager(
        viewer,
        new FocusCellHighlighter(viewer) {});

ColumnViewerEditorActivationStrategy editorActivationStrategy =
    new ColumnViewerEditorActivationStrategy(viewer) {

            @Override
            protected boolean isEditorActivationEvent(
                ColumnViewerEditorActivationEvent event) {
                    ViewerCell cell = (ViewerCell) event.getSource();
                   return cell.getColumnIndex() == 1 || cell.getColumnIndex() == 2;
            }

};

TableViewerEditor.create(viewer, focusCellManager, editorActivationStrategy,
    TableViewerEditor.TABBING_HORIZONTAL);

Vous devez ajouter un KeyListener et définir la sélection ou de se concentrer à la cellule suivante:

tableViewer.getTable().addKeyListener(new KeyListener(){

   public void keyPressed(KeyEvent e) {

       System.out.println("Key Pressed");
       if (e.keycode == SWT.TAB)
       {
           System.out.println("Detected TAB key");
           // set table viewer selection
       }
   }

   public void keyReleased(KeyEvent e) {

       System.out.println("Key Released");
   }}
);

Je devais aussi mettre en œuvre entre les éléments dans tabulant une table. Nous utilisons la grille de nébuleuse que la table. Tout d'abord, je devais supprimer l'accent tabulant empêchant de se déplacer hors de la table. entrer la description d'image ici

et puis j'ai ajouté un écouteur de touche qui déplace le focus / sélection à la cellule suivante:

J'ai aussi fait mon propre algorithme pour déplacer la sélection d'une cellule à droite et quand à la fin de la ligne, le déplacer au début de la ligne suivante. Lorsque la fin du tableau est atteint, la sélection se déplace vers la première cellule de la table.

résolu le problème pour moi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top