在 preference Store + eclipse 中添加 TableViewer Data

Add TableViewer Data in preference Store + eclipse

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

是否可以将此 table 查看器的数据存储在首选项存储中,因为首选项是 key/value 对 我如何在单击“应用”时存储此信息并填充table 稍后从偏好商店?

@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();
    }
}

谢谢

没有执行此操作的标准方法。您可以使用一个包含逗号分隔值的条目或多个包含键名 'xxx1'、'xxx2'、....

的条目

对于 RGB 值,StringConverter class 将转换 to/from 适合首选项的字符串:

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

    ...
}