0

私は現在、フォーマットされた表形式のデータを表示するためにいくつかの場所でTableViewerを使用するアプリケーションに取り組んでいます。各テーブルには、すべてのコンテンツがExcelファイルにエクスポートされるエクスポート機能が必要です。

不必要なコードの重複を避けるために、SWTのビューアフレームワークに依存し、それを使用して、登録されたラベルプロバイダーを使用してフォーマットされた表形式のデータを取得するとよいと思いました。

このアプローチは、テーブルレベルと列レベルのラベルプロバイダーのいずれかで、標準の読み取り専用テーブルでうまく機能します。ただし、EditingSupportまたはTableEditorsがテーブルに設定されているとスタックします。

このような場合、多くの場合、ラベルプロバイダーが空白の値を返し、TableViewerがEditingSupportまたはTableEditorを処理して、セルデータの表現を取得できるようにしました。

TableViewerにアタッチされているTableEditorまたはEditingSupportにアクセスして(上記のオブジェクトへの個別の参照を保持せずに)、セルデータの適切な表現を取得する方法はありますか?

そうでない場合は、おそらく、編集サポートを使用して列を処理するようにラベルプロバイダーを書き直しますが、そうする必要がない場合は便利です。

4

1 に答える 1

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");
}

かなり醜くてハッキーで、状況によっては、あなたが言ったようにLabelProviderを書き直すことをお勧めしますが、そうしないことを選択した場合は、これがオプションです。明らかに、テーブルまたは列のリストのいずれかにアクセスできる場合は、検索の混乱の一部を回避できますが、コアの考え方は変わりません。

于 2010-04-02T17:25:14.497 に答える