Domanda

Quello che mi piacerebbe fare è essere in grado di tabulazione tra gli elementi nella tabella.

Io attualmente sto creando il mio tavolo come questo.

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

Ma io non sono sicuro di come impostare la tabulazione. Tutto il resto funziona per quanto riguarda le colonne di editing, che mostrano i dati, ecc Basta bloccato su questa ultima parte.

Se ho perso la documentazione ovvie o javadocs -. Le mie scuse e anche indicando quelli sarebbe grande

È stato utile?

Soluzione

Credo che da scheda predefinita non salta da cella a cella di una tabella SWT. Invece si attraversa al controllo successivo. Così avrete anche bisogno di dire che non attraversare quando si preme scheda

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

Inoltre, come suggerito derBiggi, gli ascoltatori devono essere aggiunti all'oggetto tabella, non il TableViewer.

Altri suggerimenti

Anche se la soluzione the hiatus Inviato è molto basso livello e probabilmente funzionerà (non ho provato), JFace ti dà un quadro di riferimento per questo problema specifico. Vedere la org.eclipse.jface.viewers.TableViewerFocusCellManager insieme con le classi org.eclipse.jface.viewers.CellNavigationStrategy per risolvere questo problema.

non ho potuto ottenere il comportamento desiderato con un TraverseListener (non sarebbe attraversare all'interno della tabella), e ho avuto dei problemi a lavorare con un FocusCellManager e CellNavigationStrategy. Alla fine ho trovato questa soluzione che mi permette di scheda da una colonna all'altra all'interno di una riga e attivare automaticamente l'editor.

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

È necessario aggiungere un KeyListener e impostare la selezione o concentrarsi alla cella successiva:

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

Ho anche dovuto implementare tabulazione tra gli elementi di una tabella. Usiamo Griglia dal Nebula come la tabella. In primo luogo, ho dovuto sopprimere tabulazione l'attenzione impedendole di muoversi dalla tabella. entrare descrizione dell'immagine qui

e poi ho aggiunto un listener per i tasti che si muove il focus / selezione alla cella successiva:

entrare descrizione dell'immagine qui

Inoltre ho fatto il mio algoritmo per spostare la cella di selezione uno a destra e quando alla fine della fila, spostarlo all'inizio della riga successiva. Al raggiungimento della fine della tabella, la selezione ritorna alla prima cella della tabella.

Questo ha risolto il problema per me.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top