Frage

Was ich gerne tun würde, ist in der Lage, zwischen Elementen in der Tabelle zu tätig.

Ich erstelle derzeit meine Tabelle so.

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

Aber ich bin mir nicht sicher, wie ich die Tabelle einrichten soll. Alles andere funktioniert so weit, Spalten zu bearbeiten, Daten anzuzeigen usw. Nur in diesem letzten Teil festgehalten.

Wenn ich offensichtliche Dokumentation oder Javadocs verpasst habe - ich entschuldige mich und ich wäre sogar großartig.

War es hilfreich?

Lösung

Ich denke, standardmäßig springt die Registerkarte nicht in einer SWT -Tabelle von der Zelle zu der Zelle. Stattdessen überquert es die nächste Kontrolle. Sie müssen es also auch sagen

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

Wie Derbiggi vorschlug, müssen die Hörer dem Tabellenobjekt und nicht dem TableViewer hinzugefügt werden.

Andere Tipps

Obwohl die Lösung thehiatus Gepostet ist sehr niedrig und wird wahrscheinlich funktionieren (ich habe es nicht getestet), gibt Ihnen ein Framework für dieses spezifische Problem. Siehe das org.eclipse.jface.viewers.TableViewerFocusCellManager zusammen mit org.eclipse.jface.viewers.CellNavigationStrategy Klassen, um dieses Problem zu lösen.

Ich konnte nicht das gewünschte Verhalten mit einem bekommen TraverseListener (Es würde nicht innerhalb des Tisches durchqueren) und ich hatte Probleme, es mit einem zu arbeiten FocusCellManager und CellNavigationStrategy. Ich fand schließlich diese Lösung, mit der ich von der Spalte zur Spalte in einer Zeile Registerkarte "zu" zu erledigen "ermöglicht und den Editor automatisch aktivieren kann.

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

Sie müssen einen KeyListener hinzufügen und die Auswahl oder Fokus auf die nächste Zelle festlegen:

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

Ich musste auch Tabbing zwischen Elementen in einer Tabelle implementieren. Wir verwenden Gitter von Nebel als Tabelle. Zunächst musste ich den Fokus unterdrücken, um zu verhindern, dass er aus dem Tisch bewegt wurde.enter image description here

Und dann habe ich einen Schlüsselhörer hinzugefügt, der den Fokus/die Auswahl in die nächste Zelle verschiebt:

enter image description here

Ich machte auch meinen eigenen Algorithmus, um die Auswahl eine Zelle nach rechts zu bewegen. Wenn sie am Ende der Reihe auf den Beginn der nächsten Reihe verschoben werden. Wenn das Ende der Tabelle erreicht ist, bewegt sich die Auswahl zurück in die erste Zelle in der Tabelle.

Dies löste das Problem für mich.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top