Domanda

Io uso il TableViewer per visualizzare le informazioni in una tabella. L'utente può selezionare una delle opzioni mostrate selezionando una riga della tabella.

Voglio creare una tabella in forma matriciale, in cui l'utente può non solo scegliere la riga. Dovrebbe essere possibile selezionare ogni elemento della tavola, come riga 2 colonna 3. Ad ogni selezione elemento un'azione è chiamato a gestire questo articolo come è nel TableViewer.

Per quanto ho ora, posso aggiungere CellModifier e CellEditors alla linea di colonne della tabella, ma il riferimento per l'azione è sempre l'oggetto linea e non TableItem selezionato.

Qualcuno ha un esempio di come creare una tale matrice all'interno di un composito? Posso creare impostando un GridLayout e aggiungendo i componenti in un ciclo for, ma di quello che ricevo problemi, quando voglio ridisegnare il composito con nuovi bambini. Il TableViewer possiede già questo trattamento, in modo da non voglio implementare nuovamente.

È stato utile?

Soluzione

Ho avuto lo stesso problema qualche tempo fa e l'unico modo che ho trovato per risolverlo è stato quello di registrare un listener del mouse sul widget tavolo SWT associata allo spettatore tavolo.

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

Quindi, per esempio nella scelta ascoltatore dello spettatore, si può chiedere a chi ascolta il mouse quale colonna è stato selezionato quando il mouse è stato premuto e che si combinano con la linea selezionata proveniente dalla selezione dello spettatore per eseguire l'azione appropriata.

Spero che questo può aiutare.

Manu

Altri suggerimenti

Forse il seguente frammento JFace vi aiuterà: Snippet058CellNavigationIn34

Ingo

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top