0

私は私Map<Key,ArrayList<Value>>のデータを この値は複数の行にすることができます。だから私はセルテーブルの中にセルテーブルを置くことを考えていましたが、それは私のヘッダーに影響を与えます(外側のセルテーブルの列の数はちょうど2になるので)そしてソートにも影響します。

また、マップを直接渡すと、ListDataProvider行数がマップの行数であると想定されますが、そうではありません。

では、これを行う最善の方法は何ですか?

4

1 に答える 1

0

次のようなクラス RowObject を使用することをお勧めします。

class RowObject {
    private final Key key;
    private final Value value;

    RowObject(Key key, Value value) {
        this.key = key;
        this.value = value;
    }

    /* Getters omitted */
}

次に、マップを RowObjects のリストに変換し、リストをデータ プロバイダーにフィードします。

List<RowObject> rowObjects = new ArrayList<RowObject>();

for (Entry<Key, ArrayList<Value>> entry : map.entrySet()) {
    for (Value value : entry.getValue()) {
        rowObjects.add(new RowObject(entry.getKey(), value));
    }
}

ListDataProvider<RowObject> dataProvider = new ListDataProvider<RowObject>();
dataProvider.addDataDisplay(cellTable);
dataProvider.setList(rowObjects);

次のように列を追加します。

Column column = new Column<RowObject, String>(new TextCell()) {

    @Override
    public String getValue(RowObject object) {
        return getStringValueFor(object);
    }
};

cellTable.addColumn(column);
于 2012-11-18T17:21:09.463 に答える