Java SWT如何使表格通过单击高亮显示整行,并通过双击编辑单元格?

Java SWT如何使表格通过单击高亮显示整行,并通过双击编辑单元格?,java,eclipse,swt,jface,Java,Eclipse,Swt,Jface,这里是SWT新手。所以,我想要的是能够高亮显示整行,同时能够选择多行,并使其能够双击编辑单元格。是否需要Focuscell经理?相关代码: 编辑器激活事件 final ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(this) { @Override protected boolean isEditorActivationEven

这里是SWT新手。所以,我想要的是能够高亮显示整行,同时能够选择多行,并使其能够双击编辑单元格。是否需要Focuscell经理?相关代码:

编辑器激活事件

final ColumnViewerEditorActivationStrategy actSupport = 
   new ColumnViewerEditorActivationStrategy(this)
   {
     @Override
     protected boolean isEditorActivationEvent
     (ColumnViewerEditorActivationEvent event)
       {
         return event.type == 
             ColumnViewerEditorActivationEvent.TRAVERSAL
             || event.eventType == 
         ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
             || event.eventType == 
             ColumnViewerEditorActivationEvent.KEY_PRESSED
             || event.eventType ==
             ColumnViewerEditorActivationEvent.PROGRAMMATIC;
       }
  };

创建TableViewerEditor

TableViewerEditor.create(this,
    mgr,
    actSupport,
    ColumnViewerEditor.TABBING_HORIZONTAL|
    ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR|
    ColumnViewerEditor.TABBING_VERTICAL|
    ColumnViewerEditor.KEYBOARD_ACTIVATION);
经理(focusCellManager)代码:

tableViewer(在前面的snipper中没有出现,因为tableViewer由另一个类扩展,我们使用另一个类,所以我不想让您感到困惑):


在表列上使用
EditingSupport
,并结合以下TableViewerEditor,似乎对我很有效:

TableViewer viewer = new TableViewer(tableComp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);

ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(viewer) {
  @Override
  protected boolean isEditorActivationEvent(final ColumnViewerEditorActivationEvent event) {
    return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
        || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
        || event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
        || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
  }
};

int feature = ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_HORIZONTAL
    | ColumnViewerEditor.KEYBOARD_ACTIVATION
    | ColumnViewerEditor.TABBING_CYCLE_IN_VIEWER;

TableViewerEditor.create(viewer, actSupport, feature);

听起来你只需要使用
编辑支持
(TableViewerColumn.setEditingSupport)而不使用其他类。我在这方面还是个新手,我知道你是传奇人物,因为我在SWT上看到过你的15篇文章。你能给我一些关于如何使用它和哪些类我不需要的提示吗?看看vogella.com上的文章,谢谢!但是,这将如何防止单击一次突出显示或编辑单元格?我的一个问题是,我设置了双击来编辑单元格,这是可行的,但单击仍然会高亮显示单元格(无需编辑),而不是整行。这甚至是在设置了完整的选择位之后。嗨,格雷格。非常感谢你的回答,它真的很有帮助!然而,我有一个新问题。每当我向表中添加新行时,它都会自动高亮显示,这对我来说并不是什么问题。问题是,我添加的每一行都保持高亮显示,因此我最终得到一块蓝色高亮显示的行。你怀疑可能是什么问题吗?请不要在评论中提出新问题,而是提问。
TableViewer vwr = new TableViewer(tableComposite,SWT.BORDER|SWT.FULL_SELECTION|SWT.MULTI);
TableViewer viewer = new TableViewer(tableComp, SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER | SWT.FULL_SELECTION);

ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(viewer) {
  @Override
  protected boolean isEditorActivationEvent(final ColumnViewerEditorActivationEvent event) {
    return event.eventType == ColumnViewerEditorActivationEvent.TRAVERSAL
        || event.eventType == ColumnViewerEditorActivationEvent.MOUSE_DOUBLE_CLICK_SELECTION
        || event.eventType == ColumnViewerEditorActivationEvent.KEY_PRESSED
        || event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
  }
};

int feature = ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR | ColumnViewerEditor.TABBING_HORIZONTAL
    | ColumnViewerEditor.KEYBOARD_ACTIVATION
    | ColumnViewerEditor.TABBING_CYCLE_IN_VIEWER;

TableViewerEditor.create(viewer, actSupport, feature);