【问题标题】:eclipse scout image change日食侦察员形象改变
【发布时间】:2015-08-18 09:55:25
【问题描述】:

我正在尝试更改图像视图中的图像。

我知道getTestImageField().setImageId(Icons.Logo); 不起作用,因为它不会刷新渲染器。

因为我需要使用setImage(),所以我需要一种从Icons 类中获取图像的方法。

按照帕特里克的建议,我试试

final IconProviderService provider = SERVICES.getService(IconProviderService.class);
final IconSpec ic = provider.getIconSpec(AbstractIcons.StatusError);
final byte[] content = ic.getContent(); 

但我的问题是ic 始终是null

在调试时,我注意到在第 57 行的 IconProviderService.class 内:

@Override
protected URL findResource(String fullPath) {
  URL[] entries = FileLocator.findEntries(m_hostBundle, new Path(fullPath));
  if (entries != null && entries.length > 0) {
    URL url = entries[entries.length - 1];
    if (LOG.isDebugEnabled()) {
      LOG.debug("find image " + fullPath + " in bundle " + m_hostBundle.getSymbolicName() + "->" + url);
    }
    return url;
  }
  return null;
}

URL[] 条目始终为空,无论我尝试呈现女巫图标。

经过进一步调试,我发现FileLocator试图从bundle中查找片段,然后在这个片段中寻找路径。 (line 242)

Bundle[] fragments = activator.getFragments(b); 

Bundle[] fragments 始终为空。

通常我的捆绑包b(Bundle) EquinoxBundle : org.eclipse.scout.rt.ui.rap.mobile_4.0.100.20140829-1424

我想尝试不同的捆绑包,所以我这样做了:

final BundleContext context = Activator.getDefault().getBundle().getBundleContext();

for (final Bundle b : context.getBundles()) {

    final IconProviderService provider = SERVICES.getService(IconProviderService.class);
    provider.setHostBundle(b);
    final IconSpec ic = provider.getIconSpec(AbstractIcons.StatusError);
    if (ic != null) {
        final byte[] content = ic.getContent();
        imageField().setImage(content);
    }
}

fragments(来自上面的代码)始终为空。

【问题讨论】:

  • 这听起来很难破解。您能否添加以下信息:图标对您有用吗? (例如,表格列上的 getConfiguredIconId)您要显示的图标文件(png)在哪里?对应的 Icons 类在哪里(java 文件)?您在哪个包中检索图标?在调用检索 IconSpec 期间,AbstractIconProviderService 中的 m_hostBundle 值是多少?
  • 是的,设置图标有效。如果我设置 getConfiguredIconId 它可以工作,如果在代码集 setIconId 和更新页面中它也可以工作。图标是 Scout 中的默认图标,或者是我添加的图标(客户端/资源/图标/...)。 Icons.class 位于共享文件夹(根目录)中。我发布的捆绑包是:org.eclipse.scout.rt.ui.rap.mobile。
  • 我尝试设置不同的捆绑包 provider.setHostBundle(Activator.getDefault().getBundle());但它也没有用。
  • 我忘记了,我尝试在表单和客户端包内设置图标(不同的类)
  • 我添加编辑问题(编辑3)

标签: image eclipse-scout


【解决方案1】:

获取图片内容(byte[])可以在图片字段设置如下:

IconProviderService provider = SERVICES.getService(IconProviderService.class);
byte[] content = provider.getIconSpec(Icons.YourIconName).getContent();
getImageField().setImage(content);

我很快检查了它,它对我有用。 请确保图标可用,并按照Wiki Article中的说明设置图标提供程序服务

【讨论】:

  • 感谢您的回答,但是当我尝试此操作时,我得到 provider.getIconSpec(Icons.YourIconName) = null;代码最终 IconProviderService 提供者 = SERVICES.getService(IconProviderService.class);最终字节 [] 内容 = provider.getIconSpec(AbstractIcons.StatusError).getContent();给了我一个 nullPointer 异常
猜你喜欢
  • 1970-01-01
  • 2017-11-19
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多