Загрузка изображений из банок для Swing HTML
Хотя этот ответ работает для загрузки изображений из файлов Jar для ImageIcons
Я не могу найти правильный путь для изображений, на которые ссылается Swing HTML.
Это отображает изображение в Swing HTML, когда ресурсы не объединены в банку:
new JLabel("<html><table cellpadding=0><tr><td><img src='file:icons/folder_link.png'></td></tr><tr><td>100</td></tr></table></html>") );
Внутри банки изображение можно успешно сослать (и отобразить) в ImageIcon
:
Icon topIcon = new ImageIcon( getClass().getResource("icons/folder_link.png" ) );
Тем не менее, моя попытка использовать getResource
Техника для Swing HTML не работает.
String p = getClass().getResource("icons/folder_link.png" ).getPath();
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );
В чем секрет?
4 ответа
На самом деле, не попробовав его, я бы предположил, что средство визуализации HTML может получить доступ к вашему изображению, если вы включите URL-адрес ресурса в свой HTML-код:
String p = getClass().getResource("icons/folder_link.png" ).toString();
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );
URL это секрет
Попробуйте это, приятель:
URL p = getClass().getResource("icons/folder_link.png" );
new JLabel("<html><table cellpadding=0><tr><td><img src='" + p + "'></td></tr><tr><td>100</td></tr></table></html>") );
Тогда вы также можете сделать это:
Icon topIcon = new ImageIcon(p);
а затем установите этот значок как значок для вашего JLabel, если вы хотите это сделать!
Ответ расширен и перенесен в " Возможно ли / как встроить и получить доступ к файлам HTML в JAR?"
Поскольку даже оригинальная демоверсия от Sun для использования HTML в Swing не встраивает изображения в HTML (для создания кнопок с иконками изображений), я сомневаюсь, что есть даже поддержка отображения изображений на месте. Я помню читателя "ограниченное подмножество HTML" где-то, но не могу найти ссылку прямо сейчас.
Редактировать: Пожалуйста, смотрите комментарий и ответ Эндрю, это действительно работает.