6
votes

Onglet entre les champs de TableViewer

Qu'est-ce que je voudrais faire, c'est être capable d'onglet entre les éléments de la table.

Je crée actuellement ma table comme celle-ci. xxx

mais je ne sais pas comment configurer la tabulation. Tout le reste travaille aussi loin que d'éditer des colonnes, montrant des données, etc. Je suis resté coincé sur cette dernière partie.

Si j'ai manqué une documentation évidente ou des javadocs - Mes excuses et même montrant que ce serait bien. < / p>


1 commentaires

Dans quelle direction voulez-vous que vous comprenez?


5 Réponses :


1
votes

Vous devez ajouter un Keylistener et définir la sélection ou la mise au point sur 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");
   }}
);


2 commentaires

org.eclipse.jface.Viewers.TableViewer n'accepte pas un Keylistener


Je ne sais pas si cela fonctionne, mais TableViewer.gettable () devrait l'accepter.



7
votes

Je pense par onglet par défaut ne saute pas de cellule à la cellule dans une table SWT. Au lieu de cela, il traverse le contrôle suivant. Donc, vous devrez également le dire de ne pas traverser lorsque vous appuyez 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);


1 commentaires

Le code pourrait être simplifié si le code de sélection ( tableviewer.getable.getable (). SetSelection (...) Dans cet exemple) a été placé dans le codage keycode == swt.tab Branche du Traverselistener . Cela épargnerait un keylistener supplémentaire .



9
votes

Bien que la solution TheHiatus affichée est très bas niveau et fonctionnera probablement (je ne l'ai pas testée), Jface vous donne un cadre pour ce problème spécifique. Voir le org.eclipse.jface.Viewers.TableViewerFocReCellManagerFocReCellManager org.eclipse.jface.Viewers.cellnavigationtrategy Les classes pour résoudre ce problème.


1 commentaires

C'est un pointeur utile, mais la réponse serait plus agréable avec certains échantillons de code ou d'explication comment les utiliser précisément.



3
votes

Je ne pouvais pas obtenir le comportement souhaité avec un Traverselisener Code> (il ne traverserait pas dans la table), et j'ai eu du mal à le faire fonctionner avec un FocusCellManager Code> et Cellnavigationtrategy code>. J'ai enfin trouvé cette solution qui me permet d'inclure une colonne de colonne dans une ligne d'une ligne et d'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);


0 commentaires

0
votes

J'ai aussi dû mettre en œuvre la tabulation entre des éléments dans une table. Nous utilisons la grille de la nébuleuse comme table. Premièrement, je devais supprimer la tabulation de la mise au point de l'empêcher de sortir de la table. Entrez la description de l'image ici

Et puis j'ai ajouté un auditeur clé qui déplace la mise au point / la sélection à la cellule suivante:

 Entrez la description de l'image ici

J'ai aussi fait mon propre algorithme pour déplacer la sélection une cellule à droite et à la fin de la ligne, déplacez-la au début de la ligne suivante. Lorsque la fin de la table est atteinte, la sélection se retourne sur la première cellule de la table.

Cela a résolu le problème pour moi.


0 commentaires