Вопрос

Что я хотел бы сделать, так это иметь возможность вмешаться между элементами в таблице.

В настоящее время я так создаю свой стол.

this.tableViewer = 
            new TableViewer(parent , SWT.FULL_SELECTION);

   tableViewer.setUseHashlookup(true);
        table = tableViewer.getTable();

        GridData gridData = new GridData(GridData.FILL_BOTH);
        gridData.grabExcessVerticalSpace = true;
        table.setLayoutData(gridData);

        table.setLinesVisible(true);
        table.setHeaderVisible(true);

        ...

   /** Create the Cell Editor Array - will hold all columns **/
        editors = new CellEditor[table.getColumnCount()];
        /** Cell Editor Row 1 **/


  /** Set the column properties **/
        tableViewer.setColumnProperties(columnNames);

        /** Assign the cell editors to the viewer **/
        tableViewer.setCellEditors(editors);

        /** Set the cell modifier for the viewer **/
        tableViewer.setCellModifier(new MyCellModifier(this));
        //Create the Table Viewer

        /** Table Viewer Content and Label Provider **/
        tableViewer.setContentProvider(new MyContentProvider(this));
        tableViewer.setLabelProvider(new MyLabelProvider());

Но я не уверен, как настроить таблицу. Все остальное работает в отношении редактирования столбцов, показывающих данные и т. Д. Просто застряли в этой последней части.

Если бы я пропустил очевидную документацию или Javadocs - мои извинения и даже указание на них было бы здорово.

Это было полезно?

Решение

Я думаю, что по умолчанию вкладка не прыгает с ячейки к ячейке в таблице SWT. Вместо этого он проходит к следующему управлению. Таким образом, вам также нужно сказать, что он не проходит, когда нажата вкладка

KeyListener keyListener = new KeyLisener()
{
    public void keyPressed(KeyEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
        {
            // There are numerous setSelection methods.  I'll leave this to you. 
            tableViewer.getTable().setSelection(...)
        }
    }

    public void keyReleased(KeyEvent evt){}
}

TraverseListener traverseListener = new TraverseListener()
{
    public void keyTraversed(TraverseEvent evt)
    {
        if (evt.keyCode == SWT.TAB)
            evt.doit = false;
    }
}

tableViewer.getTable().addKeyListener(keyListener);
tableViewer.getTable().addTraverseListener(traverseListener);

Кроме того, как предположил Дербигги, слушателей должны быть добавлены в объект таблицы, а не на TableViewer.

Другие советы

Хотя решение это Опубликовано очень низкий уровень и, вероятно, будет работать (я не тестировал его), JFACE дает вам основу для этой конкретной проблемы. Увидеть org.eclipse.jface.viewers.TableViewerFocusCellManager вместе с org.eclipse.jface.viewers.CellNavigationStrategy классы для решения этой проблемы.

Я не мог получить желаемое поведение с TraverseListener (это не будет проходить в таблице), и у меня были проблемы с тем, чтобы заставить его работать с FocusCellManager а также CellNavigationStrategy. Анкет Я наконец нашел это решение, которое позволяет мне вступить из столбца до столбца в строке и автоматически активировать редактор.

Viewer viewer =  ...

TableViewerFocusCellManager focusCellManager =
    new TableViewerFocusCellManager(
        viewer,
        new FocusCellHighlighter(viewer) {});

ColumnViewerEditorActivationStrategy editorActivationStrategy =
    new ColumnViewerEditorActivationStrategy(viewer) {

            @Override
            protected boolean isEditorActivationEvent(
                ColumnViewerEditorActivationEvent event) {
                    ViewerCell cell = (ViewerCell) event.getSource();
                   return cell.getColumnIndex() == 1 || cell.getColumnIndex() == 2;
            }

};

TableViewerEditor.create(viewer, focusCellManager, editorActivationStrategy,
    TableViewerEditor.TABBING_HORIZONTAL);

Вам нужно добавить KeyListener и установить выбор или сосредоточиться на следующей ячейке:

tableViewer.getTable().addKeyListener(new KeyListener(){

   public void keyPressed(KeyEvent e) {

       System.out.println("Key Pressed");
       if (e.keycode == SWT.TAB)
       {
           System.out.println("Detected TAB key");
           // set table viewer selection
       }
   }

   public void keyReleased(KeyEvent e) {

       System.out.println("Key Released");
   }}
);

Мне также пришлось реализовать вкладки между элементами в таблице. Мы используем сетку из туманности в качестве таблицы. Во -первых, мне пришлось подавить вкладка фокуса, не позволяя ему выходить из стола.enter image description here

А потом я добавил ключевого слушателя, который перемещает фокус/выбор в следующую ячейку:

enter image description here

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

Это решило проблему для меня.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top