我想要做的是能够在表元素之间标签。

目前我创造我的表是这样的。

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());

但我不知道如何设置制表。其他的一切就可以作为编辑栏,显示数据等只是停留在这最后一部分。

如果我已经错过了明显的文档或的javadoc - 我的道歉,甚至指向这些将是巨大的。

有帮助吗?

解决方案

我认为默认选项卡不从细胞跳到细胞在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);

此外,如derBiggi建议的,听众需要被添加到表对象,而不是TableViewer中。

其他提示

虽然解决方案的 thehiatus 的发布是非常低的水平,将可能工作(我没有测试过),JFace的为您提供了这一特定问题的框架。见org.eclipse.jface.viewers.TableViewerFocusCellManager随着org.eclipse.jface.viewers.CellNavigationStrategy类来解决这个问题。

我不能得到一个TraverseListener所期望的行为(它不会在表中移动),我有麻烦它与FocusCellManagerCellNavigationStrategy工作。我终于找到这个解决方案,使我标签从列到列的行内,并自动激活编辑器。

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

我还必须实现在一个表中的元素之间的互联。我们使用网格从星云作为表。 首先,我不得不压制Tab键焦点防止其移出表。 “在这里输入的图像描述”

和然后我添加了将焦点移动/选择到下一个小区的按键侦听器:

“在这里输入的图像描述”

我还做了我自己的算法,在该行的末尾移动选择一个单元格右侧时,将它移动到下一行的开始。当达到表的结束时,选择移动回到在表中的第一个单元。

这解决了这个问题,我

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top