Pergunta

Eu uso o TableViewer para mostrar informações em uma tabela. O usuário pode selecionar uma das opções mostradas selecionando uma linha da tabela.

Eu quero criar uma mesa em forma de matriz, no qual o usuário não só pode selecionar a linha. Deve ser possível selecionar todos os itens da tabela, como a linha 2 coluna 3. Para cada seleção de item de uma ação é chamada para lidar com este item como é na TableViewer.

Tanto quanto eu agora, eu posso adicionar CellModifier e CellEditors para a linha de colunas da tabela, mas a referência para a ação é sempre o objeto de linha e não o TableItem selecionado.

Será que alguém tem um exemplo de como criar uma tal matriz dentro de um Composite? Eu posso criá-lo, definindo um GridLayout e adicionando os componentes em um loop for, mas do que eu recebo problemas, quando eu quiser redesenhar o Composite com novas crianças. faz o TableViewer já tem essa manipulação, então eu não quero implementá-lo novamente.

Foi útil?

Solução

Eu tive o mesmo problema há um tempo atrás e que a única maneira que eu encontrei para resolver era para registrar um ouvinte do mouse sobre a mesa de SWT elemento associado ao 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;
    }
}

Então, por exemplo, no ouvinte selecção do espectador, você pode pedir para o ouvinte do mouse a coluna que foi selecionado quando o mouse foi pressionado e que combinam com a linha selecionada vindo de selecção do espectador para executar a ação apropriada.

Espero que isso pode ajudar.

Manu

Outras dicas

Talvez o seguinte trecho JFace vai ajudar: Snippet058CellNavigationIn34

Ingo

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top