在首选Store + eclipse中添加TableViewer数据

时间:2017-03-14 09:48:35

标签: java eclipse eclipse-plugin swt jface

我有一个首选项页面,里面有一个表格查看器,表格的每一行都是一个包含字符串,背景颜色和前景色的对象。

是否可以将此表查看器的数据存储在首选项存储中,因为首选项是键/值对,如何在单击“应用”时存储此信息,还可以在以后从首选项存储中填充该表?

@Override
protected void performApply() {
    for (TableItem item : this.viewer.getTable().getItems()) {
        Content c = (Content) item.getData();
        String name = c.getName();
        RGB bc = c.getBackgroundColor();
        RGB fc = c.getForegroundColor();
    }
}

谢谢

1 个答案:

答案 0 :(得分:0)

没有标准的方法可以做到这一点。您可以使用一个带有逗号分隔值的条目或多个带有键名称为“xxx1”,“xxx2”的条目,....

对于RGB值,StringConverter类将转换为适合首选项的字符串:

RGB rgb = ...

String rgbString = StringConverter.asString(rgb);

RGB rgb = StringConverter.asRGB(rgbString);

(也处理许多其他类型)。

由于每行有三个值可以保存,因此每行使用三个首选项会更简单:

int row = 0;
for (TableItem item : this.viewer.getTable().getItems()) {
    Content c = (Content) item.getData();
    String name = c.getName();
    RGB bc = c.getBackgroundColor();
    RGB fc = c.getForegroundColor();

    String nameKey = "name" + row;
    String bcKey = "bc" + row;
    String fcKey = "fc" + row;

    prefStore.setValue(nameKey, name);
    prefStore.setValue(bcKey, StringConverter.asString(bc));
    prefStore.setValue(fcKey, StringConverter.asString(fc));

    ++row;
}

prefStore.setValue("rowCount", row);

读:

int rows = prefStore.getInt("rowCount");

for (int row = 0; row < rows; ++row) {
    String nameKey = "name" + row;
    String bcKey = "bc" + row;
    String fcKey = "fc" + row;

    String name = prefStore.getString(nameKey);
    RGB bc = StringConverter.asRGB(prefStore.getString(bcKey));
    RGB fc = StringConverter.asRGB(prefStore.getString(fcKey));

    ...
}