gpt4 book ai didi

eclipse - 使用 Eclipse TableViewer,如何使用箭头键导航和编辑单元格?

转载 作者:行者123 更新时间:2023-12-03 23:56:19 30 4
gpt4 key购买 nike

我正在使用 TableViewer与内容提供者、标签提供者、ICellModifierTextCellEditors对于每一列。

当用户选择单元格时,如何添加箭头键导航和单元格编辑?我希望这是一种尽可能自然的行为。

在查看了一些在线示例后,似乎有一种旧方法(使用 TableCursor)和一种新方法(TableCursor 不与 CellEditors 混合使用??)。

目前,我的TableViewer没有光标将仅在第一列中滚动。底层 SWT 表显示游标为空。

有没有TableViewer 的好例子?使用 CellEditors和通过键盘进行单元格导航?

谢谢!

最佳答案

不知道有没有好的例子。我使用一组自定义代码来获取我认为是在 TableViewer 上运行的应用程序的基本表行为。 . (请注意,此时我们仍以 3.2.2 为目标,因此情况可能已经好转或发生了其他变化。)一些亮点:

  • 我愿意 setCellEditors()在我的 TableViewer .
  • 在每个 CellEditor的控制,我建立了我认为合适的 TraverseListener .例如,对于文本单元格:
    cellEditor = new TextCellEditor(table, SWT.SINGLE | getAlignment());
    cellEditor.getControl().addTraverseListener(new TraverseListener() {
    public void keyTraversed(TraverseEvent e) {
    switch (e.detail) {
    case SWT.TRAVERSE_TAB_NEXT:
    // edit next column
    e.doit = true;
    e.detail = SWT.TRAVERSE_NONE;
    break;

    case SWT.TRAVERSE_TAB_PREVIOUS:
    // edit previous column
    e.doit = true;
    e.detail = SWT.TRAVERSE_NONE;
    break;

    case SWT.TRAVERSE_ARROW_NEXT:
    // Differentiate arrow right from down (they both produce the same traversal @*$&#%^)
    if (e.keyCode == SWT.ARROW_DOWN) {
    // edit same column next row
    e.doit = true;
    e.detail = SWT.TRAVERSE_NONE;
    }
    break;

    case SWT.TRAVERSE_ARROW_PREVIOUS:
    // Differentiate arrow left from up (they both produce the same traversal @*$&#%^)
    if (e.keyCode == SWT.ARROW_UP) {
    // edit same column previous row
    e.doit = true;
    e.detail = SWT.TRAVERSE_NONE;
    }
    break;
    }
    }
    });

  • (对于下拉表格单元格,我捕获左右箭头而不是上下箭头。)
  • 我还添加了 TraverseListenerTableViewer的控件,如果有人在选择整行时点击“返回”,则开始单元格编辑的工作是谁。
    // This really just gets the traverse events for the TABLE itself.  If there is an active cell editor, this doesn't see anything.
    tableViewer.getControl().addTraverseListener(new TraverseListener() {
    public void keyTraversed(TraverseEvent e) {
    if (e.detail == SWT.TRAVERSE_RETURN) {
    // edit first column of selected row
    }
    }
    });
  • 现在,我如何控制编辑是另一回事。就我而言,我的整个 TableViewer (以及其中每一列的表示)被松散地包裹在一个自定义对象中,该对象具有执行上述评论所说的方法。这些方法的实现最终调用 tableViewer.editElement()然后检查 tableViewer.isCellEditorActive()查看单元格是否实际上是可编辑的(如果不是,我们可以跳到下一个可编辑的单元格)。
  • 我还发现能够以编程方式“放弃编辑”很有用(例如,当从一行中的最后一个单元格中跳出时)。不幸的是,我能想出的唯一方法是一个可怕的 hack,它决定与我的特定版本一起工作,方法是深入研究会产生所需“副作用”的东西的源代码:
        private void relinquishEditing() {
    // OMG this is the only way I could find to relinquish editing without aborting.
    tableViewer.refresh("some element you don't have", false);
    }

  • 抱歉,我不能给出更完整的代码块,但实际上,我必须发布一个完整的迷你项目,而我现在不准备这样做。希望这足以让您继续前进。

    关于eclipse - 使用 Eclipse TableViewer,如何使用箭头键导航和编辑单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/710341/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com