Загрузка изображений из банок для 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>") );

В чем секрет?

Ответы

Ответ 1

Не попробовав, я бы предположил, что средство визуализации 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>") );

Ответ 2

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, если вы хотите это сделать.

Ответ 4

Потому что даже оригинальная демонстрация от Sun для использования HTML в Swing не встраивает изображения в HTML (для создания кнопок со значками изображений) Я сомневаюсь, что есть даже поддержка отображения изображений на месте. Я помню читатель "ограниченный подмножество HTML" где-то, но не могу найти ссылку прямо сейчас.

Изменить: см. комментарий и ответ Andrew, он действительно работает.