Tastatur-Steuerung in SWT Table

DHagener

Grünschnabel
Hallo Leute!

Ich habe einen JFace TableViewer mit CellEditors erstellt. So weit, so gut. Nun habe ich allerdings das Problem, dass ich in die verschiedenen editierbaren Felder nur mit der Maus springen kann. Hat jemand eine Idee, wie ich zwischen den Tabellenzellen wie in einem SWING Table navigieren kann?

Danke und Gruß

Dirk
 
Wo kriegt man denn das Snippet-Plugin her? Aus dem CVS kann ich es nicht laden, da die Firmen-Firewall das verbietet, und der Versuch SNippet96 als Java-Projekt in Eclipse laufen zu lassen schlägt leider fehl.

Danke im Voraus

Dirk

PS.: Kriegt man das Ganze auch mit den JFace-CellEditoren zum Laufen? Eigentlich erledigen die ja alles bis auf die Cursor-Steuerung, aber eine angepasste Version des Snippets tut einfach nicht das, was sie soll...
 
Hallo,

gibt es auch die Möglichkeit, das man nicht über die Pfeiltasten, sondern über den Tabulator durch die Spalten navigieren kann? Ich denke mal das Beispiel umzuschreiben ist nicht das große Problem. Nur brauche ich es so, das man durch den Druck von Tab in die nächste Spalte springt und diese auch gleich editieren kann ohne, wie in dem Beispiel, Enter zu drücken.
Ich hab schon nen paar Sachen ausprobiert, aber bei dem Druck von Tab springe ich immer zu meinem nächsten GUI-Element, also zum Beispiel zu einem Textfeld.

gruß Klaus.
 
Hallo,

um in einer SWT Table mit Tab über die einzelnen Zellen springen zu können, muss man ein wenig mehr Aufwand treiben, da die SWT Table standardmäßig nur das Selektieren einer Zeile unterstützt.

Deshalb solltest du dir erstmal anschauen wie man einzelne Zellen ansteuern kann:
http://matrex.cvs.sourceforge.net/m...thCellSelection.java?revision=1.2&view=markup

Anschließend schaust du dir dann an, wie man das Tab-Traversal anpassen kannst.
Java:
/**
 * 
 */
package de.tutorials;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.TraverseEvent;
import org.eclipse.swt.events.TraverseListener;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;

/**
 * @author Thomas.Darimont
 * 
 */
public class SWTTabTableNavigationExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);

        shell.setLayout(new RowLayout());

        final Table table = new Table(shell, SWT.BORDER | SWT.MULTI
                | SWT.FULL_SELECTION);
        table.setLinesVisible(true);

        final int rowCount = 10;

        table.addTraverseListener(new TraverseListener() {
            @Override
            public void keyTraversed(TraverseEvent e) {
                int currentSelectionIndex = table.getSelectionIndex();
                switch (e.detail) {
                case SWT.TRAVERSE_TAB_NEXT:
                    table.setSelection((currentSelectionIndex + 1) % rowCount);
                    e.doit = false;
                    break;
                case SWT.TRAVERSE_TAB_PREVIOUS:
                    int index = currentSelectionIndex - 1;
                    if (index < 0) {
                        index = rowCount - 1;
                    }
                    table.setSelection(index);
                    e.doit = false;
                    break;
                }
            }
        });

        TableColumn column1 = new TableColumn(table, SWT.NONE);
        TableColumn column2 = new TableColumn(table, SWT.NONE);
        TableColumn column3 = new TableColumn(table, SWT.NONE);

        for (int i = 0; i < rowCount; i++) {
            TableItem tableItem = new TableItem(table, SWT.NONE);
            tableItem.setText(new String[] { "a" + i, "b" + i, "c" + i });
        }

        column1.pack();
        column2.pack();
        column3.pack();

        Button button = new Button(shell, SWT.PUSH);
        button.setText("button");

        shell.pack();
        shell.setText("SWTTabTableNavigationExample");
        shell.open();

        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) {
                display.sleep();
            }
        }
    }
}

Gruß Tom
 
Hallo Tom,

danke erstmal für Deine Hilfe. Dein Beispiel mit dem Tab-Traversal geht ja auf jeden Fall in meine Richtung, nur irgendwie komme ich nicht annähernd zu dem was ich brauche. Kannst Du mir vielleicht noch eine kleine Hilfestellugn geben?

Danke Dir.

gruß Klaus.
 
Zurück