【问题标题】:How do I access a TableEditor or an EditingSupport that has been attached to a TableViewer?如何访问已附加到 TableViewer 的 TableEditor 或 EditingSupport?
【发布时间】:2010-04-03 01:25:14
【问题描述】:

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

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

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

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

我有什么方法可以访问已附加到 TableViewer 的 TableEditor 或 EditingSupport(不保留对所述对象的单独引用),以便我可以使用它们来检索单元格数据的正确表示?

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

【问题讨论】:

    标签: java swt tableviewer


    【解决方案1】:

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

    TableColumn column = new TableColumn(table, SWT.RIGHT);
    EditingSupport editingSupport = new TableEditingSupport();
    column.setData("editing_support", editingSupport);
    

    这使您可以通过对 TableViewer 的单个引用访问 EditingSupport 对象,当您想要检索它们时,您可以执行以下操作:

    final Table table = tableViewer.getTable();
    for(TableColumn column : table.getColumns())
    {
        EditingSupport editingSupport = (EditingSupport)column.getData("editing_support");
    }
    

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

    【讨论】:

    • 感谢您的回答。由于现有代码库的结构,我无法使用这种方法,因此我在需要时修复了标签提供程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多