Question

J'utilise le TableViewer pour afficher des informations dans une table. L'utilisateur peut sélectionner l'une des options affichées en sélectionnant une ligne de la table.

Je veux créer une table sous forme de matrice, dans laquelle l'utilisateur peut non seulement sélectionner la ligne. Il devrait être possible de sélectionner tous les éléments de la table, comme la ligne 2 colonne 3. Pour chaque élément de sélection d'une action est appelée à gérer cet élément comme il est dans le TableViewer.

Pour autant que je maintenant, je peux ajouter CellModifier et CellEditors à la ligne des colonnes du tableau, mais la référence de l'action est toujours l'objet de ligne et non le TableItem sélectionné.

Est-ce que quelqu'un a un exemple comment créer une telle matrice dans un composite? Je peux créer en définissant un GridLayout et en ajoutant les composants dans une boucle for, mais que je reçois des questions, quand je veux redessiner le composé avec de nouveaux enfants. Le TableViewer ne déjà cette manipulation, donc je ne veux pas le mettre en œuvre à nouveau.

Était-ce utile?

La solution

J'ai eu le même problème il y a quelques temps et la seule manière que je trouvais à résoudre était d'enregistrer un écouteur de souris sur le widget de table SWT associée au spectateur de table.

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

Alors, par exemple dans l'écouteur de sélection du spectateur, vous pouvez demander à l'auditeur de la souris quelle colonne a été sélectionnée lorsque la souris a été pressé et combiner avec la ligne sélectionnée en provenance de la sélection du spectateur pour effectuer l'action appropriée.

Espérons que cela peut aider.

Manu

Autres conseils

Peut-être que l'extrait JFace suivant vous aidera: Snippet058CellNavigationIn34

Ingo

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top