Pregunta

I uso el TableViewer para mostrar información en una tabla. El usuario puede seleccionar una de las opciones que se muestran seleccionando una línea de la tabla.

Quiero crear una tabla en forma de matriz, en la que el usuario no sólo puede seleccionar la línea. Debería ser posible seleccionar todos los elementos de la tabla, al igual que la fila 2 columna 3. Por cada selección de elementos de una acción se llama para manejar este tema, ya que es en el TableViewer.

Por lo que yo ahora, puedo añadir CellModifier y CellEditors a la línea de columnas de la tabla, pero la referencia para la acción es siempre el objeto de línea y no el TableItem seleccionado.

¿Alguien tiene un ejemplo de cómo crear una matriz de este tipo dentro de un compuesto? Puedo crear mediante el establecimiento de un GridLayout y la adición de los componentes en un bucle for, pero de lo que recibo cuestiones, cuando quiero volver a dibujar el compuesto con nuevos niños. El TableViewer tiene ya esta manipulación, por lo que no quiero aplicar de nuevo.

¿Fue útil?

Solución

Yo tenía el mismo problema hace un tiempo y la única manera que encontré para resolverlo era registrar un detector de ratón en el widget SWT tabla asociada al espectador mesa.

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

A continuación, por ejemplo, en escucha la selección del espectador, puede pedir al oyente ratón que la columna fue seleccionada cuando el ratón ha sido presionado y combinar eso con la línea seleccionada procedente de la selección del espectador para realizar la acción apropiada.

Espero que esto puede ayudar.

Manu

Otros consejos

Tal vez el siguiente fragmento JFace ayudará a: Snippet058CellNavigationIn34

Ingo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top