首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TableViewer中字段之间的制表符

TableViewer中字段之间的制表符
EN

Stack Overflow用户
提问于 2009-09-30 22:08:40
回答 5查看 7K关注 0票数 6

我想要做的是能够在表格中的元素之间切换。

我目前正在创建我的表,如下所示。

代码语言:javascript
复制
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我的道歉,甚至指向这些将是很好的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-10-07 17:07:33

我认为在默认情况下,tab不会在swt表格中从一个单元格跳到另一个单元格。相反,它会遍历到下一个控件。因此,您还需要告诉它在按tab时不要遍历

代码语言:javascript
复制
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);

此外,正如derBiggi建议的那样,需要将侦听器添加到表对象,而不是TableViewer。

票数 7
EN

Stack Overflow用户

发布于 2009-10-09 14:43:36

尽管JFace发布的解决方案是非常低级的,可能会起作用(我还没有测试过它),但它为你提供了一个解决这个特定问题的框架。请参阅org.eclipse.jface.viewers.TableViewerFocusCellManagerorg.eclipse.jface.viewers.CellNavigationStrategy类来解决此问题。

票数 9
EN

Stack Overflow用户

发布于 2016-02-29 12:03:21

我无法使用TraverseListener获得所需的行为(它不会在表中遍历),并且我很难让它与FocusCellManagerCellNavigationStrategy一起工作。我最终找到了这个解决方案,它使我能够在一行中按tab键从一列到另一列,并自动激活编辑器。

代码语言:javascript
复制
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);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1500918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档