我正在尝试更改图片视图中的图片。
我知道BaseViewController
不起作用,因为它不会刷新渲染器。
因为我需要使用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
。
在我调试时,我注意到第57行的null
内部:
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[]
试图从bundle中找到片段,然后查找这些片段中的路径。 (FileLocator
)
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);
}
}
(来自上面的代码)始终为空。
答案 0 :(得分:1)
您可以获取可在图像字段中设置的图像内容(byte[]
),如下所示:
IconProviderService provider = SERVICES.getService(IconProviderService.class);
byte[] content = provider.getIconSpec(Icons.YourIconName).getContent();
getImageField().setImage(content);
我很快检查了它,它对我有用。 请确保该图标可用,并按照此Wiki Article
中的说明设置图标提供程序服务