代码之家  ›  专栏  ›  技术社区  ›  ist_lion

TableViewer中字段之间的选项卡

  •  6
  • ist_lion  · 技术社区  · 15 年前

    我想做的是能够在表中的元素之间进行制表。

    我现在正在创建这样的表。

    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——我的道歉甚至是指那些都是很好的。

    5 回复  |  直到 8 年前
        1
  •  7
  •   thehiatus    15 年前

    我认为在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);
    

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

        2
  •  9
  •   andyczerwonka    15 年前

    尽管解决方案 裂孔 发布是非常低的级别,可能会起作用(我还没有测试过),JFace为您提供了一个针对这个特定问题的框架。查看 org.eclipse.jface.viewers.TableViewerFocusCellManager 随着 org.eclipse.jface.viewers.CellNavigationStrategy 类来解决这个问题。

        3
  •  3
  •   MidnightJava    8 年前

    我不能用 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);
    
        4
  •  1
  •   Droo    15 年前

    您需要添加一个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");
       }}
    );
    
        5
  •  0
  •   Crenguta S    8 年前

    我还必须在表中的元素之间实现tabbing。我们用星云的网格作为桌子。 首先,我必须抑制对焦,防止它移出桌子。 enter image description here

    然后我添加了一个关键监听器,它将焦点/选择移动到下一个单元格:

    enter image description here

    我还制作了自己的算法,将所选内容向右移动一个单元格,当行尾时,将其移动到下一行的开头。当到达表格结尾时,所选内容将移回表格中的第一个单元格。

    这为我解决了问题。