Показывать TableViewer не в строке, а в матричном порядке - PullRequest
1 голос
/ 04 июня 2009

Я использую TableViewer для отображения информации в таблице. Пользователь может выбрать один из показанных вариантов, выбрав одну строку таблицы.

Я хочу создать таблицу в матричной форме, в которой пользователь может не только выбрать строку. Должна быть предусмотрена возможность выбора каждого элемента таблицы, например, строки 2, столбца 3. Для каждого выбора элемента вызывается действие для обработки этого элемента, как в TableViewer.

Насколько я могу, я могу добавить CellModifier и CellEditors к строке столбцов таблицы, но ссылкой на действие всегда является объект строки, а не выбранный TableItem.

У кого-нибудь есть пример, как создать такую ​​матрицу внутри Composite? Я могу создать его, установив GridLayout и добавив компоненты в цикл for, но у меня возникают проблемы, когда я хочу перерисовать Composite с новыми дочерними элементами. TableViewer уже имеет эту обработку, поэтому я не хочу реализовывать ее снова.

Ответы [ 2 ]

2 голосов
/ 04 июня 2009

У меня была такая же проблема некоторое время назад, и единственный способ найти ее - это зарегистрировать прослушиватель мыши в виджете таблицы SWT, связанном со средством просмотра таблиц.

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

Затем, например, в слушателе выбора зрителя, вы можете спросить у слушателя мыши, какой столбец был выбран при нажатии мыши, и объединить его с выбранной линией, исходящей из выбора зрителя, для выполнения соответствующего действия.

Надеюсь, это поможет.

Ману

0 голосов
/ 07 августа 2009

Может быть, поможет следующий фрагмент JFace: Snippet058CellNavigationIn34

Инго

...