Frage

Ich verwende die Tableviewer Informationen in einer Tabelle anzuzeigen. Der Benutzer kann eine der angezeigten Optionen auswählen, indem Sie eine Zeile der Tabelle.

Ich mag eine Tabelle in Form einer Matrix erstellen, in dem der Benutzer nicht nur die Zeile auswählen. Es sollte möglich sein, jedes Element der Tabelle, wie Zeile 2 Spalte 3. Für jedes Element Auswahl wählen eine Aktion aufgerufen wird, diesen Artikel zu handhaben, wie es in dem Tableviewer ist.

Soweit ich jetzt, ich CellModifier und CellEditors zur Linie der Spalten der Tabelle hinzufügen kann, aber die Referenz für die Aktion ist immer das Linienobjekt und nicht die gewählte TableItem.

Hat jemand ein Beispiel haben, wie eine solche Matrix in einem Verbund zu schaffen? Ich kann es schaffen, indem ein Gridlayout einstellen und das Hinzufügen der Komponenten in einem for-Schleife, aber als ich Probleme bekommen, wenn ich die Verbund mit dem neuen Kindern neu gezeichnet werden soll. Der Tableviewer hat bereits diese Handhabung haben, so möchte ich nicht wieder, sie umzusetzen.

War es hilfreich?

Lösung

Ich hatte das gleiche Problem vor einer Weile und die einzige Art, wie ich es zu lösen fand, war eine Maus Zuhörer auf der SWT Tabelle Widget auf den Tisch Betrachter assoziiert zu registrieren.

MouseListener columnSelectionMouseListener = new ColumnSelectionMouseListener();
getViewer().getTable().addMouseListener(columnSelectionMouseListener);

public class ColumnSelectionMouseListener implements MouseListener {

    private TableColumn selectedColumn;

    @Override
    public void mouseDoubleClick(MouseEvent e) {
        // Nothing to do here
    }

    @Override
    public void mouseDown(MouseEvent e) {
        table = (Table) e.widget;
    TableItem item = table.getItem(new Point(e.x, e.y));
    for (int i = 0; i < table.getColumnCount(); i++) {
        TableColumn column = table.getColumn(i);
        Rectangle bounds = item.getBounds(i);
        if (bounds.contains(e.x, e.y)) {
            selectedColumn = column;
        }
    }
    }

    @Override
    public void mouseUp(MouseEvent e) {
        // Nothing to do here
    }

    public TableColumn getSelectedField() {
           return selectedColumn;
    }
}

Dann wird zum Beispiel bei der Auswahl Hörer des Betrachters, können Sie die Maus Zuhörer fragen, welche Spalte ausgewählt wurde, wenn die Maus gedrückt wurde und kombinieren, die mit der ausgewählten Zeile aus der Auswahl des Betrachters kommt die entsprechende Aktion auszuführen.

Hope this helfen kann.

Manu

Andere Tipps

Vielleicht ist die folgende JFace Schnipsel helfen: Snippet058CellNavigationIn34

Ingo

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