2015-08-18 6 views
0

Я пытаюсь изменить изображение внутри изображения.eclipse scout изменение изображения

Я знаю, что 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.

В то время как я отладка это я замечаю, что внутри IconProviderService.class в строке 57:

@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 пытается найти фрагменты из пакета, а затем искать путь внутри этих фрагментов. (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 (из выше коды) всегда нуля.

+0

Это звучит как твердый орешек для взлома. Не могли бы вы добавить следующую информацию: Иконы работают для вас вообще? (например, getConfiguredIconId в столбце таблицы) Где находится файл значков (png), который вы хотите отобразить? Где находится соответствующий класс Icons (файл java)? В каком комплекте вы извлекаете значок? Каково значение m_hostBundle в AbstractIconProviderService во время вызова для получения IconSpec? – Patrick

+1

Да, настройки значков работают. Если я установлю getConfiguredIconId, он будет работать, и если в кодовом наборе setIconId и странице обновления он будет работать. Значки по умолчанию - это значки по умолчанию, которые входят в Scout, или значки, которые я добавляю (клиент/ресурсы/значки/...). Icons.class находится в общей папке (root). Пакет, как я писал: org.eclipse.scout.rt.ui.rap.mobile. –

+0

Я пытаюсь установить другой пакет provider.setHostBundle (Activator.getDefault(). GetBundle()); но он тоже не работал. –

ответ

1

Вы можете получить содержание изображения (byte[]), который можно установить на поле изображения следующим образом:

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

Я быстро проверил это, и это работает для меня. Убедитесь, что значок доступен, и вы установили службу поставщика значков, как описано в этом документе. Wiki Article

+1

Спасибо за ваш ответ, но когда я попробую это, я получаю provider.getIconSpec (Icons.YourIconName) = null; код final IconProviderService provider = SERVICES.getService (IconProviderService.class); final byte [] content = provider.getIconSpec (AbstractIcons.StatusError) .getContent(); дал мне исключение nullPointer –

+0

Я редактирую вопрос (Edit 2) –

 Смежные вопросы

  • Нет связанных вопросов^_^