Java 如何访问已附加到TableViewer的TableEditor或EditingSupport?

Java 如何访问已附加到TableViewer的TableEditor或EditingSupport?,java,swt,tableviewer,Java,Swt,Tableviewer,我目前正在开发一个应用程序,它在多个地方使用TableViewer来显示格式化的表格数据。每个表都必须具有导出功能,其中其所有内容都导出到Excel文件中 为了避免不必要的代码重复,我认为依赖SWT的查看器框架并使用它来使用注册的标签提供程序获取格式化的表格数据会很好 这种方法适用于标准只读表,无论是表级还是列级标签提供程序。但是,当在表上设置了EditingSupport或TableEditor时,我就卡住了 在这种情况下,我们通常让标签提供程序返回空白值,并让TableViewer处理Edi

我目前正在开发一个应用程序,它在多个地方使用TableViewer来显示格式化的表格数据。每个表都必须具有导出功能,其中其所有内容都导出到Excel文件中

为了避免不必要的代码重复,我认为依赖SWT的查看器框架并使用它来使用注册的标签提供程序获取格式化的表格数据会很好

这种方法适用于标准只读表,无论是表级还是列级标签提供程序。但是,当在表上设置了EditingSupport或TableEditor时,我就卡住了

在这种情况下,我们通常让标签提供程序返回空白值,并让TableViewer处理EditingSupport或TableEditor来获取单元格数据的表示形式

我是否有办法访问已附加到TableViewer的TableEditor或EditingSupport(无需保留对所述对象的单独引用),以便使用它们检索单元格数据的正确表示形式?


如果没有,我们可能会重写标签提供程序,以便它们也使用EditingSupport处理列,但如果我们不必这样做,那就太好了。

我找不到从TableViewer检索EditingSupport或TableEditor对象的方法。我们单独存储EditingSupport对象以供使用,但听起来这不是您的选项,因此您可以将给定列的EditingSupport对象存储在列本身的数据映射中。比如:

TableColumn column = new TableColumn(table, SWT.RIGHT);
EditingSupport editingSupport = new TableEditingSupport();
column.setData("editing_support", editingSupport);
final Table table = tableViewer.getTable();
for(TableColumn column : table.getColumns())
{
    EditingSupport editingSupport = (EditingSupport)column.getData("editing_support");
}
这使您可以通过对TableViewer的单个引用访问EditingSupport对象,当您想要检索这些对象时,可以执行以下操作:

TableColumn column = new TableColumn(table, SWT.RIGHT);
EditingSupport editingSupport = new TableEditingSupport();
column.setData("editing_support", editingSupport);
final Table table = tableViewer.getTable();
for(TableColumn column : table.getColumns())
{
    EditingSupport editingSupport = (EditingSupport)column.getData("editing_support");
}

这是相当丑陋和黑客,根据您的情况,我可能会建议重写LabelProviders,正如您所说,但如果您选择不这样做,这是一个选项。显然,如果您可以访问表或列列表,您可以在检索时绕过一些混乱,但核心思想保持不变。

谢谢您的回答。由于现有代码库的结构,我无法使用这种方法,因此我在需要时固定了标签提供程序。